我对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>
<% }
%>
答案 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封装字段是一个好主意,但同样会大大扩展代码长度。