处理已选中和未选中的复选框

时间:2012-08-04 16:28:15

标签: java portlet checkbox websphere-portal

我的情况非常混乱。

<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,我很困惑处理这种情况。如果取消选中该复选框,如何提交默认值。

3 个答案:

答案 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>}>