无法取消选中Struts Multibox中的所有内容

时间:2010-03-01 03:28:12

标签: struts uncheck multibox

我在weblogic上运行了一个j2ee应用程序。我对我的multibox感到困惑。

我对multibox的了解是,已检查的项目将在提交时作为字符串数组传递。

我不知道为什么在我的应用程序中,当我取消选中一个复选框或更多时,它工作正常,只要一个盒子仍然被选中但是当我取消选中所有内容时,提交的数组就是之前检查过的多盒子的数组。应该是空的。

你能帮我吗?

1 个答案:

答案 0 :(得分:14)

您熟悉ActionForm类的reset()方法吗?

此方法的目的是重置复选框。如果您在表单中选中了复选框并提交了该复选框,则该复选框将显示在请求中。如果取消选中该复选框,则不会在请求中发送任何内容(GET提交是观察此行为的简单方法)。

当Struts执行请求绑定时,它会按名称将请求中的参数与表单中的参数进行匹配。也就是说,如果有匹配的东西。

现在考虑以下步骤:

  • 我在ActionForm上有一个布尔字段;
  • 我在表单中也有一个匹配的复选框;
  • 我提交了表单=> Struts绑定请求,所以现在我的属性在ActionForm中是正确的;
  • 我取消选中表单中的复选框,然后再次提交=>在复选框=>的请求中没有发送任何内容Struts无法绑定=>你的领域在ActionForm上仍然是真实的;

以上内容适用于多个复选框,但您只能获得一个数组而不是一个值。

输入reset()方法。在绑定请求之前,Struts会调用此方法。您可以在此处将字段值设置为false。如果它到达请求,Struts将用true =>替换它。好。如果它没有到达请求(因为它未经检查),则该值将保持为false =>好了。

多箱也是如此。您必须通过将数组减少到零长度(但不是null)来重置ActionForm中的值列表。

如果您的ActionForm有一个请求范围,它通常无关紧要,因为在每个请求时都会重新创建该对象。但对于带有复选框的会话作用域ActionForm,必须使用reset()。