浏览 10720 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-09
1.示例功能:通过一个【提交】按钮保存多行人员信息,如附件中的图片所示。 2.核心类代码: TestForm.java public class TestForm extends ActionForm{ private List voList = null; public List getVoList() { return voList; } public void setVoList(List voList) { this.voList=voList; } } PreAction.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"); } } jsp1.jsp:编辑保存的页面 <%@ 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:保存多行数据 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:展示保存结果 <%@ 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.如果同时需要删除、添加行的功能: 实现添加不难但实现删除较难,建议有这样需求的还是不要同时提交多行的较好。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-03-09
你删除的界面是作出 和邮箱里删邮件一样的吗
|
|
返回顶楼 | |
发表时间:2008-09-23
我按你的方法同样写了一个却不能运行,初始化出来了,但提交的保存的时候报这个有问题,
name='voList[<bean:write name="index1"/>].id 用你的代码却没问题,不知道是哪边出了问题。 |
|
返回顶楼 | |
发表时间:2008-10-29
javax.servlet.ServletException: BeanUtils.populate
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495) org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:709) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:44) |
|
返回顶楼 | |
发表时间:2008-10-29
是过10行,或20行添加也不需要改变代码的情况没?
|
|
返回顶楼 | |
发表时间:2008-10-29
这个貌似用DWR很容易解决。
楼主确定没有造轮子? |
|
返回顶楼 | |
发表时间:2008-10-30
LZ用心了,
|
|
返回顶楼 | |
发表时间:2008-10-30
更实用的代码,解决空值的异常问题
import java.util.ArrayList; //如果有20行表单输入域但只输入了前三行,后面的输入域会变成空值,重写ArrayList 的get()会避免这一问题 public class AutoArrayList extends ArrayList { private Class itemClass; public AutoArrayList(Class itemClass) { this.itemClass = itemClass; } public Object get(int index) { try<script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/themes/advanced/langs/zh.js"></script><script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/plugins/javaeye/langs/zh.js"></script> { while (index >= size()) { add(itemClass.newInstance()); } } catch (Exception e) { e.printStackTrace(); } return super.get(index); } } public class TestForm extends ActionForm{ private List voList = new AutoArrayList(FieldItem.class); public List getVoList() { return voList; } public void setVoList(List voList) { this.voList=voList; } } <c:forEach begin="0" end="20" var="i"> <tr> <td class="tdEditContent"><input type="text" name="voList.[${i}].id" value="voList${[i] .id}"> </td> <td class="tdEditContent"><input type="text" name="voList.[${i}].name" value="voList${[i] .name}"> </td> <td class="tdEditContent"><input type="text" name="voList.[${i}].age" value="voList${[i] .age}"> </td> </tr> </c:forEach> |
|
返回顶楼 | |