我的情况非常混乱。
<tr>
<td>
<input type="checkbox" id="box1" name="box1" <% if (renderRequest.getPreferences().getValue("box1", null).equals("on")) { %> checked="checked" <% } %> >
</td>
<td><label>Box</label></td>
</tr>
在portlet.xml中,我默认将box1值设置为“on”。因此,当我加载edit.jsp页面时,我看到值已选中。现在,我想处理未经检查的复选框的情况,我很困惑。当我取消选中该框时,提交的值为null,我很困惑处理这种情况。如果取消选中该复选框,如何提交默认值。
答案 0 :(得分:1)
虽然这个问题是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;
}
无论服务器处理如何,这都构成了完整的解决方案。
答案 1 :(得分:0)
据我记忆,添加value属性并将其设置为您想要的值应该有效。下面添加value="on"
。
<input type="checkbox" id="box1" name="box1" value="on"
<% if (renderRequest.getPreferences().getValue("box1", null).equals("on")) { %>
checked="checked"
<% } %> >
答案 2 :(得分:0)
使用razor语法:
<input type="checkbox" name="xxx" value="xxx" @if(condition == true) {<text>checked="checked"</Text>}>