- 浏览: 469986 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
excellent95:
谢楼主分享,确实是CSS图片问题
Struts2判断页面是POST方式提交还是GET方式提交 -
wangluo2:
javaBase那个包显示有问题啊pom文件那一行报错了
微信公众平台开发实战(08) 基于地理信息的服务(LBS) -
andilyliao:
jd技术这么渣也好意思出书,真是醉了
《京东技术解密》试读--十年磨一剑 -
bitray:
刘强东作序多什么,他也不会什么技术,腾讯出来帮他还不是因为腾讯 ...
《京东技术解密》试读--十年磨一剑 -
come_for_dream:
想试试搞这个
《大型分布式网站架构设计与实践》试读
使用Struts提交多行数据
提交页面form.jsp,用于提交两条数据,注意[]的使用:
<FORM METHOD=POST ACTION="survey.jui"> <INPUT TYPE="text" NAME="surveys[0].checkPerson"> <INPUT TYPE="text" NAME="surveys[1].checkPerson"> <INPUT TYPE="submit"> </FORM>
响应页面index.jsp(survey.jui),用于获得数据:
<logic:iterate id="survey" name="surveyListForm" property="surveys" indexId="index"> <html:text name="survey" property="checkPerson" indexed="true"/> </logic:iterate>
struts-config.xml:
<form-beans> <form-bean name="surveyForm" type="com.fenet.insurance.crm.web.form.SurveyForm" /> <form-bean name="surveyListForm" type="com.fenet.insurance.crm.web.form.SurveyListForm" /> </form-beans> <action path="/survey" parameter="method" type="com.fenet.insurance.crm.web.action.SurveyAction" name="surveyListForm" scope="request" validate="false"> <forward name="method1" path="/index.jsp" /> </action>
SurveyAction:
public class SurveyAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { SurveyListForm sForm = (SurveyListForm)form; List list = sForm.getSurveys(); for(int i=0; i<list.size(); i++){ SurveyForm f = (SurveyForm)list.get(i); System.out.println(f.getCheckPerson());//后台打印多行数据 } request.setAttribute("surveys", sForm); return mapping.findForward("method1"); } }
SurveyListForm定义多行数据:
public class SurveyListForm extends BaseForm{ private List surveys = new AutoArrayList (SurveyForm.class); /** * @return Returns the surveys. */ public List getSurveys() { return surveys; } /** * @param surveys The surveys to set. */ public void setSurveys(List surveys) { this.surveys = surveys; } }
SurveyForm:
public class SurveyForm extends BaseForm{ private String checkPerson; /** * @return Returns the checkPerson. */ public String getCheckPerson() { return checkPerson; } /** * @param checkPerson The checkPerson to set. */ public void setCheckPerson(String checkPerson) { this.checkPerson = checkPerson; } }
AutoArrayList,用于自动创建List里面的对象:
public class AutoArrayList extends ArrayList { private Class itemClass; public AutoArrayList(Class itemClass) { this.itemClass = itemClass; } public Object get(int index) { try { while (index >= size()) { add(itemClass.newInstance()); } } catch (Exception e) { e.printStackTrace(); } return super.get(index); } }
在Struts中使用JavaBean和List(多行数据)类型属性
http://tech.ccidnet.com/art/3741/20030227/533379_1.html
在 Strust 中,我们可能经常要在 ActionForm 中使用其他 JavaBean 作为属性类型,这里就存在着如何使用好这些属性与 HTML Form 之间的数据交换,下面我们就这些问题做一讲解。
如在用户注册界面中,我们通常会将用户的联系方式形成一个单独的新的 Class ,如 Contact ,包含以下属性:电话 (tel) ,手机(cell) , Email(email) , QQ(qq) ,通信地址 (adress) 等等,这样条理也比较清晰,以下是这个
ActionForm 的部分代码:
public class RegisterForm extends ActionForm{ private Integer id; private String logonName; private String realName; private Contact contact=new Contact(); ……….. }
在这里我们需要将 Contact 实例化(在 reset 函数中需要重新实例化),这主要因为 Struts 的机制:如我们将 HTML 的Form 元素(如 email )值传给 ActionForm , Struts 需要执行的操作是getContact().setEmail(String email) ,如果这时返回的 contact 对象为空的话,那么赋值如何进行,而且Struts 也不会知道如何去实例化 Contact ,有时这些 JavaBean 的类型有可能是接口,实例化更是未知,所以关于JavaBean 类型在 ActionForm 中的实例化,你需要自行完成,而且必须完成。至于在实际操作中判断 JavaBean是否被进行过相关操作(不再是初始状态),你需要自行判断,其实也很简单,如可在 Contact 类中编写一个函数检验一下即可。
ActionForm 创建完毕后,我们需要在 Jsp Form 中引用这些 JavaBean 类型的属性值,那就很简单啦,只需采用“ Form 的属性名称”+“ . ”+“ JavaBean 中的属性名称”结构构成的名称付给相关元素即可。如:
<html:text property="contact.email"/>
通过这种方式我们就可以处理好 ActionForm 中的 JavaBean 类型的属性值了。
实际的情况可能更复杂些,我们有时可能要提交多行数据到后退,而且行内的数据是相关的,如我们需要提交多个用户的联系方式,这些行内的数据,如email ,电话,手机,这些数据都是和用户编码相关的,现在我们修改一下 Contact 类,添加一个用户编码 (userId)属性,这时我们构建的 ActionForm 中可能需要一个列表数据( List )类型来处理这种情况。以下是这个 ActionForm的部分代码:
public class ModifyBatchContactForm extends ActionForm{ private List contact =new AutoArrayList (Contact.class); ….. }
在以上代码中,我们同样处理了 List 类型数据的初始化。 Struts 在给 List 中的对象赋值时,当然需要先获取 List
数据,然后在获取 List 中某一个对象(通过 Index),最后给对象赋值。在这里想我们可以更详细点分析浏览器端传过来数据,字段值形式如下:contact[0].email=linux_china@hotmail.com , Struts 获取 ActionForm 中的 List数据后,通过 Index (此时为 0 )来获取 List 中封装的 JavaBean 对象,然而此时 List是空的(尽管初始化了,但是没有数据),是无法取得封装的对象的,因此我们要在 Struts 获取 List中封装的对象的时候给它创建一个,这样就保证对象的获取和赋值的成功进行,所有我们新建一个 AutoArrayList 类,继承ArrayList ,只要重写 get(int index) 方法即可,其实很简单,代码如下:
public class AutoArrayList extends ArrayList { private Class itemClass; public AutoArrayList(Class itemClass) { this.itemClass = itemClass; } public Object get(int index) { try { while (index >= size()) { add( itemClass.newInstance()); } } catch (Exception e) { e.printStackTrace(); } return super.get(index); } }
这样我们就完成可以多行数据提交的 ActionForm设计,这里还有点提醒,如果从浏览器端传过来的行索引是跳跃是的,如缺少中间行,而你不想要这些数据的话,且首尾行 index相差很大的话,这种方式可能不太适合。这种多行提交形式比较适合对固定行的数据处理。如果行数不固定的话,你可以参考使用 MapForm 方式实现。
下面我们就看看如何在 Jsp 中使用这个 ActionForm ,其实只需要执行一个循环即可:
<logic:iterate id=" contact " name=" FormName " property=" contact " indexId="index"> <html:text name=" contact " property="userId" indexed="true" /> <html:text name=" contact " property="email" indexed="true"/> </logic:iterate>
这里我们再讲解一下,代码中出现的“ contact ”(红色)都是 ActionForm 中的 List数据类型变量名称,请确保一致,请不要更改名称,这也是方便提交到后台的数据接收。“ FormName ”为在 struts-config中声明的 ActionForm 名称。 indexed="true" 可以确保生成的 html 元素的名称唯一,不要缺少这个声明。以上的Jsp 代码,你也可以使用 JSTL 来完成,就看你习惯如何了。
通过以上步骤,我们完成了多行数据的提交所有环节,这样 Struts 就会完成其他所有的事情,我们的代码逻辑和实现也简单多了。
总结:通过以上两个例子,相以信对 ActionForm 中使用 JavaBean 和 List 类型数据不会再陌生,同时使用 Map类型,这样可创建更好的 ActionForm 设计,关于 MapForm ,请参考 http://www.jetmaven.net/documents/j_mapformInStruts.php 。不过引入这种方式后,在Validator 方面你可能要花点脑筋啦(如通过 XDoclet 生成 Validator文件可能功能不全),可能你需要手写一些代码来完成相关工作。
发表评论
-
Spring Security 3.0 记住密码功能
2016-01-13 22:58 20571,在数据库中新增记录表 -- ---------- ... -
解决JavaMail发邮件抛出找不到SharedByteArrayInputStream类的异常
2011-07-22 11:21 7396在最近项目开发过程中 ... -
怎样让Word自动更新图片与表格编号
2010-12-31 17:03 11656怎样让Word 自动更新图片与表格编号 ... -
W3C_School在线教程chm版制作教程
2010-12-22 21:48 7628W3C_School 在线教程chm 版制作教程 ... -
String与StringBuffer区别详解
2010-12-17 17:19 3242String 与StringBuffe ... -
Spring 3.0 新特性
2010-12-10 10:58 3352Spring 3.0 新特性 ... -
iText生成PDF时表头设置错误导出数据不能完全导出
2010-07-20 12:16 2141在利用iText生成PDF文件时,通常由于数据量比较多时会产生 ... -
事务管理入门-JDBC/Hibernate事务管理器/Spring注解 3种方式
2009-07-28 15:09 4637在软件开发过程中,经 ... -
JavaMail
2009-07-16 16:56 0javamail 怎样设置发件人的名字 http://to ... -
IBM Ajax系列教程
2009-02-16 20:39 1702第 1 部分: Ajax 简介 Ajax ... -
项目经验之弹出页面再弹出页面
2009-02-13 18:58 1055在项目中有这样一个场景,某弹出页面要弹出另一个: 弹出页面: ... -
正则表达式使用之替换多个字符串
2009-02-13 15:44 2528想一次性去掉某个文本文件中的某些字符串: 实现方式: 直接用竖 ... -
OGNL的jar档、文档和源代码
2009-02-05 09:25 51821、官方网站: http://mirrors.ibiblio. ... -
Calendar与java.sql.Date
2008-12-08 15:29 1657在Oracle数据库中,我们会有Date类型的数据,存储格 ... -
利用JavaScript控制单选框
2008-12-04 19:14 2272<script> function f(index ... -
JSP中使用JavaScript重定向页面
2008-12-03 10:04 3322第一种,不重定向,推荐使用。 function init( ... -
如何去掉 Code Pro 的警告标志
2008-11-07 16:35 1302Code Pro 是一个很好的代码格式检查工具,不过有时我们只 ... -
Ant使用经验
2008-10-22 10:18 12521、【示例1】: <?xml version=" ... -
利用JXL(JExcelApi)操作Excel文档
2008-10-09 10:51 51761、工具类: package com.coderdream. ... -
JSP下载文档
2008-10-07 14:08 18811、设置doc格式的文件弹出对话框: <?xml v ...
相关推荐
STRUTS中用道德 多行提交,这是个很好的范例和总结
NULL 博文链接:https://arang.iteye.com/blog/420546
struts提交list数据,批量保存到数据库。
struts2.0的数据校验框架struts2.0的数据校验框架struts2.0的数据校验框架struts2.0的数据校验框架
struts批量修改数据struts批量修改数据struts批量修改数据struts批量修改数据struts批量修改数据struts批量修改数据struts批量修改数据struts批量修改数据
解决Struts提交中文出现乱码和提交日期型数据报错的问题,有两个文件夹,里面分别有使用说明。
struts2.0的数据校验struts2.0的数据校验struts2.0的数据校验struts2.0的数据校验struts2.0的数据校验struts2.0的数据校验
使用struts2进行数据类型转换(附图)非常详细
运用struts2将数据库中的数据导入和导出,同时会用到poi的jar包
Struts2_1100_SimpleDataValiation.rar Struts2简单数据校验源码 Struts2简单数据校验源码
Ajax+Struts使用Json数据心得Ajax+Struts使用Json数据心得Ajax+Struts使用Json数据心得Ajax+Struts使用Json数据心得
struts框架中数据源的配置
后端使用struts2框架,前端使用ajax两者相互交互,传递json格式数据
利用Struts 2标签创建ex3.jsp页面,此页面提交给tag.action,在structs.xml中配置这个action的转发视图为result.jsp在result.jsp页面中显示ex3.jsp页面控件的值。(源代码和实验报告)
北大青鸟 Y2 学年 使用Struts 2框架开发租房网站
struts2的数据校验
整合了Struts2 的数据封装的三种方式,以及其知识点整合
Struts开发中常用的数据源配置
适合struts2入门使用,主要是struts拦截到的数据类型转换的问题
该资源使用struts实现分页功能,是通过Action实现中枢的作用