【问题标题】:Struts2 checkboxes returning values in Action classStruts2 复选框在 Action 类中返回值
【发布时间】:2011-01-29 14:33:24
【问题描述】:

我对 struts2 很陌生,所以我试图发布您需要了解我的问题的所有内容,非常感谢您的帮助。尝试更清楚,我在这个问题上缺乏想法,即使听起来像经典。

<s:checkbox name="selectedIndex" theme="simple" >
</s:checkbox>

我的 JSP 中有动态数量的复选框。假设我的 jsp 中有三个复选框。然后如果用户选择第一个和第二个复选框,那么我想要一个元素为 {1,2} 的动作类中的数组。如果用户选择第一个和第三个复选框,然后我想要一个元素为 {1,3} 的动作类中的数组。我如何在 struts2 中做到这一点?

我在动作类中有getter和setter:

public String[] getSelectedIndex() {
return selectedIndex;
}

public void setSelectedIndex(String[] selectedIndex) {
this.selectedIndex = selectedIndex;
}

所以 actionClass 给我真假。

在下面的代码中 List1(存储在会话对象中)是 StatusDTO 和 getter 的列表,setter 如下 StatusDTO 的元素是 :-

public boolean getIsDisabled()
{
return this.isDisabled;
}

public void setIsDisabled(boolean isDisabled)
{
this.isDisabled=isDisabled;
}

public int getSerialNo()
{
return this.serialNo;
}

public void setSerialNo(int serialNo)
{
this.serialNo=serialNo;
}

jsp中的实际代码是

<%
ArrayList temp=(ArrayList)ActionContext.getContext().getSession().get("List1");
Iterator itr=temp.iterator();
while(itr.hasNext())
{
StatusDTO psd=(StatusDTO)itr.next();
System.out.println("********"+psd.getSerialNo());
%>
<tr>
<td bgcolor="#E6FAFB">
<%=psd.getSerialNo()%>
</td>
<td bgcolor="#E6FAFB">
<%
if(psd.getIsDisabled())
{
%>
<s:checkbox name="selectedIndex" theme="simple" disabled="true">
</s:checkbox>
<%
}
else
{
%>
<s:checkbox name="selectedIndex" theme="simple" value="1">
</s:checkbox>
<%}
%>

</td>
</tr>
<% }
%> 

【问题讨论】:

    标签: jsp struts2


    【解决方案1】:

    员工豆应该有

    private boolean delete; /// with its setter and getter
    

    JSP

    <s:iterator name="staffList" status="bean_rowNum">
        <s:checkbox name="staffList[%{#request.attr.bean_rowNum-1}].delete" />
    </s:iterator>
    

    提交时,您将获得选中的复选框为真

    【讨论】:

      【解决方案2】:

      我更喜欢列表而不是数组... 让这个非常简短的示例运行起来,它将向您展示如何动态选择复选框。

      演示列出了许多用数字标记的复选框,从第一个列表中选择的框将出现在第二个列表中,在第二个列表中选择的框将成为无序列表的一部分。

      JSP“checkboxes.jsp”

      <%@taglib prefix="s" uri="/struts-tags"%>
      <html>
          <body>
              <h1>All Check Boxes</h1>
              <s:form action="checkboxes">
                  <s:checkboxlist name="selectedBoxes" list="allBoxes"/>
                  <s:submit/>
              <h1>Selected Check Boxes</h1>
                  <s:checkboxlist name="selectedSelectedBoxes" list="selectedBoxes"/>
                  <s:submit/>
              </s:form>
              <h1>Values chosen from selected Check boxes</h1>
              <ul>
                  <s:iterator value="selectedSelectedBoxes">
                      <li><s:property/></li>
                  </s:iterator>
              </ul>
          </body>
      </html>
      

      动作类“Checkboxes.java”

      package struts2;
      
      import com.opensymphony.xwork2.ActionSupport;
      import java.util.ArrayList;
      import java.util.Arrays;
      import java.util.List;
      
      public class Checkboxes extends ActionSupport{
          public List<Integer> allBoxes = Arrays.asList(1,2,3,4,5,6,7,22,33,44); //ten elements
          public List<Integer> selectedBoxes = new ArrayList();
          public List<Integer> selectedSelectedBoxes = new ArrayList();
      }
      

      如果使用约定,如果使用 xml 操作“checkboxes”映射到类“struts2.Checkboxes”,这很简单

      您可以从示例中看到,所选复选框的显示状态与无序列表中的内容可能存在差异。这在 action 方法中很容易更正,但会使示例更长,并有损于说明复选框的功能。此外,有些人认为用 getter 和 setter 封装字段是个好主意,但同样会大大增加代码长度。

      【讨论】:

        猜你喜欢
        • 2013-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-13
        相关资源
        最近更新 更多