`
yufenfei
  • 浏览: 801116 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts使用list提交多行表单

阅读更多

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

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

2.核心类代码:

TestForm.java

Java代码
  1. public class TestForm extends ActionForm{   
  2.   
  3.     private List voList = null;   
  4.     public List getVoList() {   
  5.         return voList;   
  6.      }   
  7.     public void setVoList(List voList) {   
  8.         this.voList=voList;   
  9.      }   
  10.   
  11. }  
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代码
  1. public class PreAction extends Action {   
  2.   
  3.     public ActionForward execute(ActionMapping mapping, ActionForm form,   
  4.              HttpServletRequest request, HttpServletResponse response) {   
  5.          TestForm aform = (TestForm)form;   
  6.          TestVo vo1=new TestVo("1","vo1","11");   
  7.          TestVo vo2=new TestVo("2","vo2","22");   
  8.          TestVo vo3=new TestVo("3","vo3","33");   
  9.          List voList = new ArrayList();   
  10.          voList.add(vo1);   
  11.          voList.add(vo2);   
  12.          voList.add(vo3);   
  13.          aform.setVoList(voList);   
  14.         return mapping.findForward("jsp1");   
  15.            
  16.      }   
  17. }  
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代码
  1. <%@ page language="java" contentType="text/html;charset=UTF-8"pageEncoding="GBK"%>   
  2. <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>   
  3. <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>   
  4. <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>   
  5.   
  6. <html>   
  7.      <head><title>This is jsp1.</title></head>   
  8.   
  9.      <body>   
  10.          <B>Edit</B>   
  11.          <html:form action="/saveAction">   
  12.              <TABLE>   
  13.                  <TR>   
  14.                      <TD>id</TD>   
  15.                      <TD>name</TD>   
  16.                      <TD>age</TD>   
  17.                  </TR>   
  18.                  <logic:iterate id="vo" name="testForm" property="voList" indexId="index1">   
  19.                  <TR>   
  20.                      <TD><input name='voList[<bean:write name="index1"/>].id' value='<bean:write name="vo" property="id"/>'></TD>   
  21.                      <TD><input name='voList[<bean:write name="index1"/>].name' value='<bean:write name="vo" property="name"/>'></TD>   
  22.                      <TD><input name='voList[<bean:write name="index1"/>].age' value='<bean:write name="vo" property="age"/>'></TD>   
  23.                  </TR>   
  24.                  </logic:iterate>   
  25.              </TABLE>   
  26.              <input type="submit" value=" 提交 " />   
  27.          </html:form>   
  28.   
  29.      </body>   
  30. </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代码
  1. public class SaveAction extends Action {   
  2.   
  3.     public ActionForward execute(ActionMapping mapping, ActionForm form,   
  4.              HttpServletRequest request, HttpServletResponse response) {   
  5.          TestForm aform = (TestForm)form;   
  6.          List voList=aform.getVoList();   
  7.         //TODO:you can save data to database here.   
  8.            
  9.          request.setAttribute("voList", voList);   
  10.         return mapping.findForward("jsp2");   
  11.      }   
  12.   
  13. }  
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代码
  1. <%@ page language="java" contentType="text/html;charset=UTF-8"  
  2.      pageEncoding="GBK"%>   
  3. <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>   
  4. <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>   
  5. <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>   
  6.   
  7. <html>   
  8.      <head><title>This is jsp2.</title></head>   
  9.      <body>   
  10.          <B>View</B>   
  11.          <br>   
  12.              <TABLE border=1>   
  13.                  <TR>   
  14.                      <TD>id</TD>   
  15.                      <TD>name</TD>   
  16.                      <TD>age</TD>   
  17.                  </TR>   
  18.                  <logic:iterate id="vo" name="voList">   
  19.                  <TR>   
  20.                      <TD><bean:write name="vo" property="id"/></TD>   
  21.                      <TD><bean:write name="vo" property="name"/></TD>   
  22.                      <TD><bean:write name="vo" property="age"/></TD>   
  23.                        
  24.                  </TR>   
  25.                  </logic:iterate>   
  26.              </TABLE>   
  27.      </body>   
  28. </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.如果同时需要删除、添加行的功能:
实现添加不难但实现删除较难,建议有这样需求的还是不要同时提交多行的较好。

分享到:
评论

相关推荐

    struts中多行提交问题

    为了实现在Struts框架下多行数据的动态添加与提交,我们可以利用JavaScript来动态生成表单元素。具体来说,就是通过JavaScript函数在用户界面上动态添加新的表单行,每一行包含多个输入框,用于收集不同的数据字段。...

    提交多行数据到Struts的ActionForm的List属性中

    当我们需要在客户端提交多行数据时,通常会利用表单来收集信息,然后将这些数据传递到服务器端的ActionForm。这个过程涉及到如何将客户端的数据组织成一个集合,如List,并将其绑定到ActionForm的属性上。在本篇中,...

    struts2 表单标签的使用

    这篇博客将深入探讨Struts2中的表单标签及其使用方法。 首先,我们需要理解Struts2表单标签的基本结构。通常,一个表单标签以`&lt;s:form&gt;`开头,并以`&lt;/s:form&gt;`结束。它允许我们指定表单的属性,如`action`(表单...

    struts2标签使用例子

    - `s:submit`:创建提交按钮,触发表单提交。 - `s:form`:创建表单,可以自动处理Action的验证和结果跳转。 - `s:property`:显示Action属性的值。 - `s:action`:执行一个Action并显示结果。 - `s:debug`:...

    struts2表单标签(转) - 努力创造未来!

    首先,Struts2的表单标签主要分为两种类型:简单表单标签(s:textfield, s:password, s:textarea等)和复杂表单标签(s:form, s:submit, s:checkbox, s:radio等)。这些标签都是基于OGNL(Object-Graph Navigation ...

    struts2标签使用方法

    - 在处理表单提交时,利用Struts2的表单标签,框架会自动处理数据验证和类型转换。 6. **注意事项**: - 确保在web.xml中配置了Struts2的核心过滤器`&lt;filter-class&gt;org.apache.struts2.dispatcher.ng.filter....

    struts1.2标签实例

    5. `&lt;s:radio&gt;`和`s:checkbox`:创建单选按钮和复选框,通常与`list`属性一起使用,显示可选的选项。 6. `&lt;s:select&gt;`:创建下拉选择框,可以动态加载选项。 7. `&lt;s:submit&gt;`:创建提交按钮,触发Action的执行。 8. ...

    Struts2案例翻译篇-Using Struts2 Tag

    本篇将深入讲解如何在Struts2中使用Tag,以及它们在"HelloWorld"案例中的应用。 1. **Struts2 Tags介绍** Struts2标签库是基于JSP标准标签库(JSTL)的扩展,它提供了一系列预定义的标签,用于处理表单、链接、...

    struts2-tags-API,struts2标签api

    7. `s:submit`: 提交表单的按钮,可以指定动作和样式。 8. `s:form`: 表单标签,自动处理请求转发和验证。 9. `s:action`: 运行Struts2 Action,通常用于页面间的跳转。 10. `s:i18n`: 国际化标签,支持多语言环境。...

    struts2官方例子3--使用Struts2标签

    本教程将深入讲解Struts2官方例子3,主要关注如何使用Struts2提供的标签。 一、Struts2标签库概述 Struts2的标签库是基于JSP标准标签库(JSTL)的扩展,提供了丰富的标签来处理表单、验证、国际化等功能。这些标签...

    struts2的使用标签

    下面我们将深入探讨Struts2的使用标签及其在实际开发中的应用。 一、Struts2标签库介绍 Struts2提供了丰富的标签库,这些标签主要用于处理用户界面,减少开发者与JSP页面之间的交互代码。主要包含以下几类标签: 1...

    struts2标签解析

    它们的用法与`s:checkbox`和`s:checkboxlist`相似,只是在表单提交时,只会有一个单选按钮的值被提交。 6. `s:form`: 表单标签,用于包裹所有表单元素。它的`action`属性指定了提交的Action,`method`属性可以设置...

    struts1标签及实例

    - `struts_taglib`:这个目录可能包含了Struts1的标签库JAR文件,它是使用Struts1标签所必需的库。 了解并熟练掌握Struts1的标签库是提升Java Web开发效率的关键,通过合理的使用,能够有效地降低代码复杂度,提高...

    struts2 jar包 包含 标签

    使用Struts2标签,可以实现更清晰、更可维护的JSP页面。 2. **s:form标签** s:form是Struts2中最常用的标签之一,用于创建HTML表单。它不仅可以生成表单元素,还可以绑定到Action类的属性,实现数据提交。例如: ...

    Struts2-2.3.24 Html帮助文档

    5. `&lt;s:submit&gt;`:创建提交按钮,触发表单的提交动作。 6. `&lt;s:form&gt;`:定义一个表单,可以设置表单的动作、方法以及验证规则。 7. `&lt;s:select&gt;`和`&lt;s:option&gt;`:创建下拉选择列表,支持动态加载选项。 8. `...

    Struts2标签 UI标志又可以分为表单UI和非表单UI两部分

    ### Struts2 标签详解:表单UI与非表单UI #### 一、概述 Struts2作为Java Web开发中的一个重要框架,为开发者提供了丰富的标签库来简化Web页面的构建过程。根据官方文档所述,“UI标签又可以分为表单UI和非表单UI...

    struts2 UI标签

    - `s:checkbox`和`s:checkboxlist`: 处理复选框,可以单个使用或以列表形式显示。 - `s:radio`: 用于创建单选按钮,同样支持列表展示。 - `s:select`和`s:option`: 创建下拉选择列表,可以从Action类的集合属性动态...

    struts2标签写法

    5. **使用Struts2标签的优点** - 提高可读性和可维护性:标签使得代码更清晰,降低了视图层与业务逻辑的耦合。 - 动态数据绑定:通过OGNL表达式,可以方便地访问和操作模型对象的属性。 - 强大的表单处理能力:...

    Struts2标签集锦(附Struts2标签详解word文档)

    2. **表单标签(Form Tags)**:专门处理HTML表单的标签,例如`&lt;s:textfield&gt;`用于创建文本输入框,`&lt;s:textarea&gt;`创建多行文本输入框,`&lt;s:submit&gt;`定义提交按钮,还有`&lt;s:checkbox&gt;`和`s:radio&gt;`用于复选框和单选...

    struts常用标签示例

    通过`Struts.CHM`文档,你可以详细了解到每个标签的属性和用法,以及如何在实际项目中结合使用这些标签来构建复杂的用户界面。在学习过程中,建议结合实际案例进行练习,以加深理解并提高应用能力。

Global site tag (gtag.js) - Google Analytics