您的位置:首页 > 编程语言 > Java开发

struts使用list提交多行表单(提供完整示例)

2008-11-08 20:47 639 查看

在struts框架中常常会遇到多行表单的情况, 如何有效的利用struts框架提供的自动收集机制来处理呢? 这里提供一个示例.

1.示例功能:通过一个【提交】按钮保存多行人员信息,如附件中的图片所示。

2.核心类代码:

TestForm.java

Java代码



public class TestForm extends ActionForm{

private List voList = null;

public List getVoList() {

return voList;

}

public void setVoList(List voList) {

this.voList=voList;

}

}

public class TestForm extends ActionForm{

private List voList = null;
public List getVoList() {
return voList;
}
public void setVoList(List voList) {
this.voList=voList;
}

}


PreAction.java:准备初始数据

Java代码



public class PreAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) {

TestForm aform = (TestForm)form;

TestVo vo1=new TestVo("1","vo1","11");

TestVo vo2=new TestVo("2","vo2","22");

TestVo vo3=new TestVo("3","vo3","33");

List voList = new ArrayList();

voList.add(vo1);

voList.add(vo2);

voList.add(vo3);

aform.setVoList(voList);

return mapping.findForward("jsp1");

}

}

public class PreAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
TestForm aform = (TestForm)form;
TestVo vo1=new TestVo("1","vo1","11");
TestVo vo2=new TestVo("2","vo2","22");
TestVo vo3=new TestVo("3","vo3","33");
List voList = new ArrayList();
voList.add(vo1);
voList.add(vo2);
voList.add(vo3);
aform.setVoList(voList);
return mapping.findForward("jsp1");

}
}


jsp1.jsp:编辑保存的页面

Java代码



<%@ page language="java" contentType="text/html;charset=UTF-8"pageEncoding="GBK"%>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>

<html>

<head><title>This is jsp1.</title></head>

<body>

<B>Edit</B>

<html:form action="/saveAction">

<TABLE>

<TR>

<TD>id</TD>

<TD>name</TD>

<TD>age</TD>

</TR>

<logic:iterate id="vo" name="testForm" property="voList" indexId="index1">

<TR>

<TD><input name='voList[<bean:write name="index1"/>].id' value='<bean:write name="vo" property="id"/>'></TD>

<TD><input name='voList[<bean:write name="index1"/>].name' value='<bean:write name="vo" property="name"/>'></TD>

<TD><input name='voList[<bean:write name="index1"/>].age' value='<bean:write name="vo" property="age"/>'></TD>

</TR>

</logic:iterate>

</TABLE>

<input type="submit" value=" 提交 " />

</html:form>

</body>

</html>

<%@ page language="java" contentType="text/html;charset=UTF-8"pageEncoding="GBK"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>

<html>
<head><title>This is jsp1.</title></head>

<body>
<B>Edit</B>
<html:form action="/saveAction">
<TABLE>
<TR>
<TD>id</TD>
<TD>name</TD>
<TD>age</TD>
</TR>
<logic:iterate id="vo" name="testForm" property="voList" indexId="index1">
<TR>
<TD><input name='voList[<bean:write name="index1"/>].id' value='<bean:write name="vo" property="id"/>'></TD>
<TD><input name='voList[<bean:write name="index1"/>].name' value='<bean:write name="vo" property="name"/>'></TD>
<TD><input name='voList[<bean:write name="index1"/>].age' value='<bean:write name="vo" property="age"/>'></TD>
</TR>
</logic:iterate>
</TABLE>
<input type="submit" value=" 提交 " />
</html:form>

</body>
</html>


SaveAction.java:保存多行数据

Java代码



public class SaveAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) {

TestForm aform = (TestForm)form;

List voList=aform.getVoList();

//TODO:you can save data to database here.

request.setAttribute("voList", voList);

return mapping.findForward("jsp2");

}

}

public class SaveAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
TestForm aform = (TestForm)form;
List voList=aform.getVoList();
//TODO:you can save data to database here.

request.setAttribute("voList", voList);
return mapping.findForward("jsp2");
}

}


jsp2.jsp:展示保存结果

Java代码



<%@ page language="java" contentType="text/html;charset=UTF-8"

pageEncoding="GBK"%>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>

<html>

<head><title>This is jsp2.</title></head>

<body>

<B>View</B>

<br>

<TABLE border=1>

<TR>

<TD>id</TD>

<TD>name</TD>

<TD>age</TD>

</TR>

<logic:iterate id="vo" name="voList">

<TR>

<TD><bean:write name="vo" property="id"/></TD>

<TD><bean:write name="vo" property="name"/></TD>

<TD><bean:write name="vo" property="age"/></TD>

</TR>

</logic:iterate>

</TABLE>

</body>

</html>

<%@ page language="java" contentType="text/html;charset=UTF-8"
pageEncoding="GBK"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>

<html>
<head><title>This is jsp2.</title></head>
<body>
<B>View</B>
<br>
<TABLE border=1>
<TR>
<TD>id</TD>
<TD>name</TD>
<TD>age</TD>
</TR>
<logic:iterate id="vo" name="voList">
<TR>
<TD><bean:write name="vo" property="id"/></TD>
<TD><bean:write name="vo" property="name"/></TD>
<TD><bean:write name="vo" property="age"/></TD>

</TR>
</logic:iterate>
</TABLE>
</body>
</html>


3.几点说明:
A.strut填充ActionForm的方法:
如果key是简单的'name',直接form.setName(map.get('name'));
如果key是'person.name', 执行的操作是 form.getPerson().setName(map.get('person.name');
如果key是'voList[0].name', 它可以对应到数据或集合中,如对于数组 form.voList[0].name=map.get('voList[0].name'); 对于集合(List) form.getVoList().get(0).setName(map.get('voList[0].name'))
B.如果同时需要删除、添加行的功能:
实现添加不难但实现删除较难,建议有这样需求的还是不要同时提交多行的较好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: