如何在Struts2中获取特定的未选中复选框

时间:2014-02-16 02:35:25

标签: javascript jquery checkbox jqgrid struts2

在我的应用程序中,我正在打印一些文档以及一些复选框(在页面加载时默认选中一些复选框)对某些特定操作。

现在用户将检查一些复选框或者可以取消选中某些复选框。并点击更新按钮。

现在我的要求是我想要取消选中的复选框值。

例如:

  

首次加载页面时,会检查5个复选框   默认超过700个复选框;

     

现在,用户将取消选中2个复选框,然后点击“提交”。

     

我的要求就在这里,我想要那些2   我的操作类中未选中的复选框值。

我正在使用Struts2来打印这些文档。我正在使用Struts2-jQgrid,我已经尝试过Struts2 CheckboxInterceptor来获取未经检查的那些但是它给了我所有未经检查的复选框,而不仅仅是所需的复选框(那些改变了状态)。

1 个答案:

答案 0 :(得分:1)

假设您从迭代自定义对象列表开始,

private List<MyCustomObject> myList;

并且你的自定义对象有例如。 boolean isChecked()String getValue()方法,

您可以在目标操作中使用两个不同的列表:一个用于未经检查且现在已选中的项目,另一个用于已检查但现在未选中的项目

private List<String> itemsThatHaveBeenChecked;
private List<String> itemsThatHaveBeenUnchecked;

然后在页面中你应该使用经典复选框来获取被检查的项目,并使用隐藏的输入来存储未经检查的项目的值,使用javascript激活其值与复选框值相反(必须没有名称) :

<s:iterator value="myList" status="ctr">
    <s:if test="!isChecked()">
        <!-- I'm not checked, need to catch only if I will be checked -->
        <s:checkbox id = "checkbox_%{#ctr.index}" 
            fieldValue = "%{getValue()}"
                 value = "false" 
                  name = "itemsThatHaveBeenChecked" />
    </s:if>
    <s:else>
        <!-- I'm checked, need to catch only if I will be unchecked -->
        <input type = "checkbox" 
                 id = "<s:property value="%{'checkbox_'+#ctr.index}"/>"
            checked = "checked"
              class = "startedChecked" />
        <!-- hidden trick -->
        <input type = "hidden" 
                 id = "hidden_<s:property value="%{'checkbox_'+#ctr.index}"/>" 
              value = "<s:property value="%{getValue()}"/>"         
               name = "itemsThatHaveBeenUnchecked" 
           disabled = "disabled" />            
    </s:else> 
</s:iterator>

<script>
    /* Enable the hidden field when checkbox is unchecked, 
      Disable the hidden field when checkbox is checked    */
    $(function() {
        $("input[type='checkbox'].startedChecked").change(function () {
            $("#hidden_"+this.id).prop({disabled : this.checked});
        });
    });
</script>

这样,您只能获得两个列表中所需的值。