【问题标题】:What value is submitted by struts checkbox tag when checkbox is unselected取消选中复选框时,struts复选框标记提交什么值
【发布时间】:2013-05-31 21:34:01
【问题描述】:
我遇到了这种情况。
class MyForm extends IdSelectionForm {
private Boolean approveIt = true;
.....
}
我的 JSTL 表单包括
<html:checkbox property="approveIt" styleId="style1" value="true"/>
当我选择复选框并提交时。在 struts 操作中,我为该字段设置了真实值。
当我再次取消选中它并提交时。然后我也得到了真正的价值。我想知道它是否具有默认值。当我取消选中时,它是否应该被 false 覆盖。
【问题讨论】:
标签:
jsp
checkbox
struts-1
【解决方案1】:
首先,<html:checkbox> 是一个 Struts 标签而不是 JSTL 标签。此标记仅生成复选框类型的标准 HTML 输入。 HTML 复选框在选中时将其值作为参数值发送,而在未选中时不发送任何参数。
所以,由于表单字段的默认值为 true:
- 如果复选框被选中,它将被 Struts 设置为 true
- 如果未选中该复选框,则 Struts 不会将其设置为任何内容,因此将保持其默认值:true
approveIt 属性的默认值应为 false。这样,如果未选中该复选框,它将保持其默认值(false),这是正确的。并且如果勾选了复选框,就会设置为true,这也是正确的。
【解决方案2】:
我遇到了同样的问题。
即使将布尔变量初始化为 false,问题仍然存在。
问题是我的作用域是session。
将范围更改为 request 后,一切都按预期工作。
【解决方案3】:
value 属性包含标签使用的值,并且与checkbox 状态无关,如果它是checked 或未选中。
提交时,仅通过选中的复选框。然后 Struts 捕获它们并按名称设置相应的 bean 属性。
如果您内联或在构造函数中按初始化值,则只有checked 复选框将通过设置 bean 属性值来更新。您无法更新未选中状态。
因此,在填充表单之前不要设置任何值。如果未设置该值,则 Struts 将该值视为false 并从标记中删除checked。这等效于将值显式设置为false。
与true 值相反的行为,但复选框没有其他值的状态,例如null,而不是true 或false,对应于复选框checked 或未选中的状态(没有@ 987654333@ 属性)。