如何在Struts 2动作类中检索复选框值?

时间:2011-07-23 11:15:14

标签: jsp struts2

我在jsp页面中有动态数量的复选框,如下所示。

<s:iterator value="details"  status="stat">
         <s:checkbox name="checkbox"  theme="simple" />
         <s:hidden name="hidden" value="%{top}" /> 
</s:iterator>

让我们说4个复选框。

和行动类中的setter是

public void setCheckbox(boolean s[])
{
    System.out.println(s.length);
}

如果我没有选中任何复选框,s.length为零。 如果我选择第3个复选框,则s.lenght为1,并且正在使用s[0]初始化true。 但问题是在这里如何找到第三个复选框被选中还是选中了另一个复选框。

如果我选择第三个复选框,我认为setter会初始化s[]={false,false,true,false}。但它正在初始化s[]={true}

要在数据库中执行所需操作,需要这些选定框的相应隐藏值。但为此,我需要找到选择复选框 请建议我任何解决方案。

2 个答案:

答案 0 :(得分:5)

因为您的复选框名称相同(checkbox),所以Struts2只传递以下内容:

checkbox=true&checkbox=true&checkbox=true

这是否意味着您省略了第二个,第三个或第四个复选框?

你真正想要的不是一个布尔数组,而是一个Integer到Boolean的映射。这是一个例子:

示例动作

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;
  }
}

示例JSP

<s:iterator value="details" status="stat">
  <%-- this outputs checkboxes[0], checkboxes[1], etc. --%>
  <s:checkbox name="checkboxes[%{#stat.index}]"  theme="simple" />
</s:iterator>

示例结果

  • 0 - &gt;是的
  • 1 - &gt;假
  • 2 - &gt;真
  • 3 - &gt;真

答案 1 :(得分:0)

实际上我使用Struts 2 3.8和WebSphere 7.0和Map工作来渲染复选框,但是当这些复选框回发时不能工作。布尔类被正确呈现,但在Struts 2中的回发期间,它变为ognl.NoConversionPossible并最终出现No result defined for action CLASS ...and result input错误。
我用String类替换了Boolean,即

maps.put(new Integer(0), new String("true")); 

它适用于我。