【问题标题】:Can`t uncheck all in Struts Multibox无法取消选中 Struts Multibox 中的所有选项
【发布时间】:2011-01-22 03:54:06
【问题描述】:

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

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

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

你能帮帮我吗?

【问题讨论】:

    标签: struts multibox


    【解决方案1】:

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

    此方法的实际用途是重置复选框。如果您的表单中有一个选中的复选框并且您提交了它,那么该复选框将在请求中。如果未选中该复选框,则不会针对它的请求发送任何内容(GET 提交是观察此行为的一种简单方法)。

    当 Struts 执行请求绑定时,它通过名称将请求中的参数与表单中的参数进行匹配。也就是说,如果有什么可以匹配的。

    现在考虑以下步骤:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 2018-10-14
      • 1970-01-01
      • 2013-01-19
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多