我在jsp页面中具有动态复选框数量,如下所示。
<s:iterator value="details" status="stat"> <s:checkbox name="checkbox" theme="simple" /> <s:hidden name="hidden" value="%{top}" /> </s:iterator>
假设有4个复选框。
动作班的二传手是
public void setCheckbox(boolean s[]) { System.out.println(s.length); }
如果我未选中任何复选框,s.length则为零。如果我选择第三个复选框,s.lenght为1,则初始化s[0]用true。但问题在于,如何找到第三个复选框或另一个复选框。
s.length
s.lenght
s[0]
true
我以为s[]={false,false,true,false}如果选择第三个复选框,则setter将初始化。但是它正在初始化s[]={true}。
s[]={false,false,true,false}
s[]={true}
这些选定框的相应隐藏值是执行数据库中所需操作所必需的。但是为此,我需要找到选择复选框。 请给我建议任何解决方案。
因为您的复选框都被命名为相同的(checkbox),所以Struts2仅传递以下内容:
checkbox
checkbox=true&checkbox=true&checkbox=true
这是否意味着您省略了第二,第三或第四复选框?
您真正想要的不是布尔数组,而是整数到布尔的映射。这是一个例子:
public class MyAction extends ActionSupport { private Map<Integer, Boolean> checkboxes; ... public Map<Integer, Boolean> getCheckboxes() { return checkboxes; } public void setCheckboxes(Map<Integer, Boolean> checkboxes) { this.checkboxes = checkboxes; } }
<s:iterator value="details" status="stat"> <%-- this outputs checkboxes[0], checkboxes[1], etc. --%> <s:checkbox name="checkboxes[%{#stat.index}]" theme="simple" /> </s:iterator>