虽然这个问题是 3 年前提出的,但我正在为未来的观众添加一个答案。
如果未选中复选框,则不会发送。因此,如果未检查devang将其值设置为“开/关”的答案将无济于事-它将始终返回 NULL。
我发现的最简单的解决方案是添加一个具有相同名称的隐藏字段,如果未选中复选框,将使用该字段。
例如,在您的代码中,解决方案可能是
<tr>
<td>
<input type="checkbox" id="box1" name="box1" value="1" <% if (renderRequest.getPreferences().getValue("box1", null).equals("on")) { %> checked="checked" <% } %> >
</td>
<td>
<input type="checkbox" id="box1_hidden" name="box1" value="0" >
</td>
</tr>
上面的代码取决于服务器对参数的处理,因为浏览器将发送这两个参数。如果未选中该复选框,则隐藏字段的值将按原样使用(因为浏览器不发送 null 参数)。但是,如果选中该复选框,事情就会变得很麻烦,因为现在浏览器会看到两个值对应于相同的名称字段。
例如,Java 仅提供具有特定名称的字段的第一个值。另一方面,PHP 将最后一个值作为要使用的值。
因此,您需要执行一个额外的步骤并调用 JavaScript。这个想法是根据检查的条件禁用隐藏的输入。
if(document.getElementById("box1").checked) {
document.getElementById('box1_hidden').disabled = true;
}
无论服务器处理如何,这构成了完整的解决方案。