在我的应用程序中,我正在打印一些文档以及一些复选框(在页面加载时默认选中一些复选框)对某些特定操作。
现在用户将检查一些复选框或者可以取消选中某些复选框。并点击更新按钮。
现在我的要求是我想要取消选中的复选框值。
例如:
首次加载页面时,会检查5个复选框 默认超过700个复选框;
现在,用户将取消选中2个复选框,然后点击“提交”。
我的要求就在这里,我想要那些2 我的操作类中未选中的复选框值。
我正在使用Struts2来打印这些文档。我正在使用Struts2-jQgrid,我已经尝试过Struts2 CheckboxInterceptor来获取未经检查的那些但是它给了我所有未经检查的复选框,而不仅仅是所需的复选框(那些改变了状态)。
答案 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>
这样,您只能获得两个列表中所需的值。