5

我遇到了这种情况。

class MyForm extends IdSelectionForm {
  private Boolean approveIt = true;
  .....
}

我的 JSTL 表单包括

<html:checkbox property="approveIt" styleId="style1" value="true"/>

当我选择复选框并提交时。在 struts 操作中,我为该字段设置了真实值。当我再次取消选中它并提交时。然后我也得到了真正的价值。我想知道它是否具有默认值。当我取消选中时,它是否应该被 false 覆盖。

4

3 回答 3

7

首先,<html:checkbox>是 Struts 标签而不是 JSTL 标签。此标记仅生成复选框类型的标准 HTML 输入。HTML 复选框在选中时将其值作为参数值发送,而在未选中时不发送任何参数。

因此,由于表单字段的默认值为 true:

  • 如果复选框被选中,它将被 Struts 设置为 true
  • 如果未选中该复选框,则 Struts 不会将其设置为任何内容,因此将保持其默认值:true

approveIt属性的默认值应为 false。这样,如果未选中该复选框,它将保持其默认值(false),这是正确的。并且如果勾选了复选框,它将被设置为true,这也是正确的。

于 2013-05-31T21:41:17.503 回答
2

value属性包含标签使用的值,并且与状态无关checkbox,如果它是checked或未选中。

提交时,仅通过选中的复选框。然后 Struts 捕获它们并按名称设置相应的 bean 属性。

如果您内联或在构造函数中按初始化值,则只会checked通过设置 bean 属性值来更新复选框。您无法更新未选中状态。

因此,在填充表单之前不要设置任何值。如果未设置该值,则 Struts 将该值视为标签false并将其checked从标签中删除。这等效于将值设置为false显式。

与该值相反的行为true但复选框没有其他值的状态,例如null而不是truefalse对应于复选框checked或未选中(无checked属性)的状态。

于 2013-06-01T21:59:55.660 回答
2

我遇到了同样的问题。即使在布尔变量初始化为 false 后,问题仍然存在。

问题是我的范围是session.

将范围更改为request一切都按预期工作。

于 2015-08-14T20:52:40.470 回答