html-el:checkbox在Struts验证错误显示后被选中



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

我的问题是,如果一行的复选框未选中,并且由于其他一些字段的原因,如果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>

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

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

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

检查ActionForm中的reset()validate()代码,以及Action类中的execute()代码,并查看数据的回签位置。

相关内容

  • 没有找到相关文章

最新更新