struts - 无法在 Struts Multibox 中取消选中所有内容

标签 struts multibox

我有一个在 weblogic 上运行的 j2ee 应用程序。我对我的多功能盒感到困惑。

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

我不知道为什么在我的应用程序中,当我取消选中一个或多个复选框时,只要一个复选框保持选中状态,它就可以正常工作,但是当我取消选中所有内容时,提交的数组是先前选中的多选框的数组本来应该是空的。

你能帮我吗?

最佳答案

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

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

当 Struts 执行请求绑定(bind)时,它会按名称将请求中的参数与表单中的参数相匹配。也就是说,是否有匹配的内容。

现在考虑以下步骤:

  • 我在 ActionForm 上有一个 bool 字段;
  • 我的表单中还有一个匹配的复选框;
  • 我提交表单 => Struts 绑定(bind)请求,所以现在我的属性在 ActionForm 中为 true;
  • 我取消选中表单中的复选框并再次提交 => 复选框请求中没有发送任何内容 => Struts 没有任何内容可绑定(bind) => 您的字段在 ActionForm 上保持 true;

上述内容适用于多个复选框,但您会得到一个数组而不是一个值。

输入reset()方法。这是由 Struts 在绑定(bind)请求之前调用的。您可以在此处将字段值设置为 false。如果它到达请求,Struts 会将其替换为 true => OK。如果它没有到达请求(因为它未被选中),该值将保持 false => 再次确定。

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

如果您的 ActionForm 有请求范围,通常并不重要,因为每次请求时都会重新创建对象。但对于带有复选框的 session 范围 ActionForm,reset() 是必须的。

关于struts - 无法在 Struts Multibox 中取消选中所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2353733/

相关文章:

java - 随着应用程序的增长,Struts 2 验证无法正常工作

java - 如何在jsp页面中检查session是否存在

java - 单元测试 Struts

java - 使用java将一个类中的getters/setters获取到一个actionform中

java - 如何在eclipse galileo中配置struts?