首先,
<html:checkbox>
是Struts标签而不是JSTL标签。该标签只是生成一个复选框类型的标准 HTML 输入。 HTML 复选框在选中时将其值作为参数值发送,而在未选中时不发送任何参数。
因此,由于表单字段的默认值为 true:
approveIt
属性的默认值应该是 false。这样,如果未选中该复选框,它将保留其默认值 (false),这是正确的。如果选中该复选框,它将被设置为 true,这也是正确的。
我也遇到了同样的问题。 即使布尔变量初始化为 false 后问题仍然存在。
问题是我的范围是
session
。
将范围更改为
request
后,一切都会按预期进行。
value
属性包含标签使用的值,并且与 checkbox
状态无关(如果它是 checked
或未选中)。
提交时,只有选中的复选框才会通过。然后 Struts 捕获它们并按名称设置相应的 bean 属性。
如果您在内联或构造函数中预初始化值,则只有
checked
复选框将通过设置 bean 属性值进行更新。您无法更新未选中的状态。
因此,在填充表单之前不要设置任何值。如果未设置该值,则 Struts 会将该值视为
false
并从标签中删除 checked
。这与显式将值设置为 false
等效。
与值
true
相反的行为,但复选框没有其他值的状态,如 null
而不是 true
或 false
对应于复选框 checked
或未选中状态(没有 checked
)属性)。