【问题标题】:html-el:checkbox gets checked after a Struts validation error displayhtml-el:checkbox 在 Struts 验证错误显示后被选中
【发布时间】:2012-07-13 20:05:24
【问题描述】:

我有一个非常简单的问题。下面是我的 JSP 代码,其中我在行中显示多个复选框。默认情况下所有复选框都被选中,如果用户想忽略某些行,他取消选中该行的复选框。

我的问题是,如果未选中行的复选框并且由于某些其他字段,如果 Struts 在屏幕上引发表单验证错误,则未选中的复选框将显示为选中状态。我错过了什么吗?如果没有 struts 验证,那么一切看起来都是正确的。

<c:forEach var="map" items="${form.displayList}" varStatus="index"> 
    <html-el:checkbox styleId="someCheckbox_${index.index}" property="someCheckboxes[${index.index}]"  />
     <td> .....</td>
     <td> .....</td>
     <td> .....</td>
</c:forEach>

【问题讨论】:

  • 表单的 setSomeCheckboxes 属性有什么作用?如果可能,请发布此代码和 getSomeCheckboxes 代码,以及您的操作中显示验证的代码。

标签: struts jsp-tags struts-validation struts-html


【解决方案1】:

当您向 Struts 提交数据时,会发生以下情况:

  • Struts 有一个front controller,所有请求都通过这个控制器。这是ActionServlet 类,然后根据struts-config.xml 中的配置将请求传递给适当的Action 类。
  • 在此之前,如果ActionForm 实例是会话保存的表单,则会被构造或重用;
  • reset() 在 ActionForm 上被调用。 This is where you reset checkbox properties to false。这是必需的,因为在您提交时未在请求中发送未选中的 HTML 复选框,因此 Struts 不会为它们请求数据绑定(如果它们在您加载页面时被选中,即使用户在提交时未选中它们,它们仍保持选中状态);
  • ActionForm 中填充了请求数据(现在选中所有选中的复选框,未在提交时发送的复选框由于之前的重置而保持未选中状态);
  • 如果在struts-config.xml 中指定,则调用ActionForm 的validate() 方法;
  • 如果验证失败,如果在struts-config.xml 中指定,则将控件返回给输入JSP(提交的数据是页面将显示的内容,因为它在ActionForm 上);
  • 如果验证成功,则调用 Action 类的 execute() 方法;
  • Action 类完成它的工作并转发到某个 JSP。

这就是您使用 Struts 的方式吗?我的猜测是您正在 Action 类中进行一些填充/重置/验证,当验证失败时,您使用默认数据重新加载 ActionForm。

检查reset()validate() 代码的ActionForm 和execute() 的Action 类,并查看在哪里检查数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2013-11-19
    • 1970-01-01
    • 2014-12-27
    • 2021-11-17
    相关资源
    最近更新 更多