Struts2复选框在Action类中返回值

时间:2011-01-29 14:33:25

标签: jsp struts2

我对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>
<% }
%> 

2 个答案:

答案 0 :(得分:3)

员工 Bean应该

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>

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

答案 1 :(得分:0)

我更喜欢列表到数组...让这个非常简短的示例工作,它将向您展示如何动态选择复选框。

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

JSP&#34; checkboxes.jsp&#34;

<%@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>

Action Class&#34; Checkboxes.java&#34;

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操作&#34;复选框&#34;这是直截了当的。映射到类&#34; struts2.Checkboxes&#34;

从示例中可以看出,所选复选框的显示状态与无序列表中的内容之间可能存在不一致。这在动作方法中很容易纠正,但会使示例更长,并且有损于说明复选框的功能。还有一些人觉得用getter和setter封装字段是一个好主意,但同样会大大扩展代码长度。