版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ActionForm空字段问题和struts类型转化器ActionForm空字段问题ActionForm空字段问题是指:当表单中没有这个输入域,使用EL表达式去取值的情况和采用jsp脚本去取值的情况。另一种是表单中有这个输入域,但是没有值,使用EL表达式去取值的情况和采用jsp脚本去取值的情况。结果如下:在表单中没有input输入域,jsp脚本接收到的值为null,字符串是null,整型是0。el表达式接收到的值为空串如果表单中的值,没有输入,那么jsp脚本和el表达式接收到的值都为空串ActionForm之struts类型转化器Struts对ActionForm的自动搜集过程: * 将页面数
2、据放到map中,其中map中的key为页面中的名称,map中的value为页面中的value值 * 调用BeanUtils.setProperties方法,将map中的值逐个设置到ActionForm实例上,对于ActionForm中的每个属性 根据类型调用相应的Converter,然后调用相应的convert方法,将相应的字符串转换成ActionForm中指定的类型 对于java.util.Date 需要自定义类型转换器 由于页面传过来的数据都是String类型,在后台使用的是不同的类型,故需要转换器来对页面传过来的数据进行转换。以实例来演示:在首页里填数据:<li>测试Acti
3、onForm类型转换器</li><br><form action="typeconvert.do" method="post">intValue:<input type="text" name="intValue"><br>/测试整型,即输入值之后让类型转换器将其转换成intdoubleValue:<input type="text" name="doubleValue"><br>/测试双精度
4、值,输入值之后让类型转换器将其转换成doublebooleanValue:<input type="text" name="booleanValue"><br>/测试布尔值,输入值之后让类型转换器将其转换成booleanjava.sql.Date:<input type="text" name="sqlDate"><br>/测试sql.Datejava.util.Date:<input type="text" name="utilD
5、ate"><br>/测试util.Date<input type="submit" value="提交"></form>建立ActionForm,用于数据收集:/* struts中的类型转换测试* author Administrator*/public class TypeConvertActionForm extends ActionForm private int intValue;private double doubleValue;private boolean booleanValue;pr
6、ivate java.sql.Date sqlDate;/数据类型为java.sql.Date private java.util.Date utilDate;public int getIntValue() return intValue;public void setIntValue(int intValue) Value = intValue;public double getDoubleValue() return doubleValue;public void setDoubleValue(double doubleValue) this.doubleValue =
7、doubleValue;public boolean isBooleanValue() return booleanValue;public void setBooleanValue(boolean booleanValue) this.booleanValue = booleanValue;public java.sql.Date getSqlDate() return sqlDate;public void setSqlDate(java.sql.Date sqlDate) this.sqlDate = sqlDate;public java.util.Date getUtilDate()
8、 return utilDate;public void setUtilDate(java.util.Date utilDate) this.utilDate = utilDate;建立Action:/* struts中的类型转换测试* author Administrator*/public class TypeConvertTestAction extends Action Overridepublic ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpS
9、ervletResponse response)throws Exception return mapping.findForward("success");建立显示页面:在这个页面取值:如果能正确取出,则转化就没问题,否则就有问题。<body>intValue:$typeconvertFValue <br>/可以自动转换doubleValue:$typeconvertForm.doubleValue <br>/可以自动转换booleanValue:$typeconvertForm.booleanValue <br&g
10、t;/可以自动转换java.sql.dateValue:$typeconvertForm.sqlDate <br>/可以自动转换java.util.utilValue:$typeconvertForm.utilDate <br>/不可以自动转换,需要自己写转换器< /body>做相关的配置:<form-bean name="typeconvertForm" type="com.mine.struts.TypeConvertActionForm"/><action path="/typecon
11、vert"type="com.mine.struts.TypeConvertTestAction"name="typeconvertForm"scope="request"><forward name="success" path="/typeconvert_success.jsp"/> </action>启动测试,得到结果如下:boolean:yes,1,on,true都会转换成True类型,而且忽略大小写,其他情况转换成falseDate类型的转换:如
12、果是java.sql.Date,页面日期的格式必须为yyyy-mm-dd,才可以转换(必须以横线隔开)如果是java.util.Date,默认情况下struts无法转换自定义转换器的实现步骤实现converter接口,实现convert方法将实现的conerter注册,通常情况采用servlet注册(struts自带的转换器的注册是在struts.jar包中的action里的ActionServlet.class中,在这个方法里面有一个init()方法,在这个方法里调用了很多方法,其中有个inintOther()方法,转换器就是在这里面注册的)采用servlet注册需要注意标签的配置,<
13、load-on-startup>10</load-on-startup>(也可以采用struts plugin注册)自定义转化器的过程:(一自定义java.util.Date类型转换器为例)首先写一个类,实现converter接口,实现convert方法:import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import mons.beanutils.Converter;/* java.util.Date类型转换器* author Administrato
14、r*/public class UtilDateConverter implements Converter public Object convert(Class type, Object value) System.out.println("UtilDateConverter.value=" + value);if (value = null) return value;if (value instanceof Date) return value;Date d = null;if (value instanceof String) SimpleDateFormat s
15、df = new SimpleDateFormat("yyyy-MM-dd");/格式化格式try d = sdf.parse(String)value); catch (ParseException e) / TODO Auto-generated catch blocke.printStackTrace();return d;写一个servlet来注册自定义的转换器:import java.util.Date;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;impor
16、t mons.beanutils.ConvertUtils;/* 注册java.util.date转换器* author Administrator*/public class UtilDateConverterInitWithServlet extends HttpServlet Overridepublic void init() throws ServletException /复写初始化的方法。/System.out.println("UtilDateConverterInitWithServlet.init()");ConvertUtils.register(ne
17、w UtilDateConverter(), Date.class);/参照struts自带的转换器注册方法,第一个参数是自定义的转换器对象,第二个是类型。这样就把我们自己写的转换器注册到map里面最后一步就是配置起来:在web.xml中配置(load-on-startup在web服务器启动时候初始化,只要大于0的值就行) <servlet><servlet-name>UtilDateConverterInitWithServlet</servlet-name><servlet-class>com.bjsxt.mine.UtilDateConve
18、rterInitWithServlet</servlet-class><load-on-startup>3</load-on-startup>/意思是当tomcat启动的时候就初始化</servlet>另一种方法 建一个类,实现PlugIn接口 ,在这个接口中有一个init方法,可以在这里实现。import java.util.Date;import javax.servlet.ServletException;import mons.beanutils.ConvertUtils;import org.apache.struts.action.A
19、ctionServlet;import org.apache.struts.action.PlugIn;import org.apache.struts.config.ModuleConfig;public class UtilDateConverterInitWithPlugin implements PlugIn public void destroy() public void init(ActionServlet servlet, ModuleConfig config)throws ServletException System.out.println("UtilDateC
20、onverterInitWithPlugin.init()");ConvertUtils.register(new UtilDateConverter(), Date.class);然后在在struts-config.xml中配置 :(在最后面了)<plug-in className="com.mine.struts.UtilDateConverterInitWithPlugin"/>/使用plug-in标签,写入完整的路径< /struts-config>struts自定义类型转换器Struts对ActionForm的自动搜集过程: *
21、将页面数据放到map中,其中map中的key为页面中的名称,map中的value为页面中的value值 * 调用BeanUtils.setProperties方法,将map中的值逐个设置到ActionForm实例上,对于ActionForm中的每个属性 根据类型调用相应的Converter,然后调用相应的convert方法,将相应的字符串转换成ActionForm中指定的类型 对于java.util.Date 需要自定义类型转换器 1、实现converter接口 Java代码 · package com.twh.struts; ·· import java.tex
22、t.ParseException; · import java.text.SimpleDateFormat; · import java.util.Date; ·· import mons.beanutils.Converter; ·· /* · * java.util.Date类型转换器 · * author Administrator · * · */ · public class UtilDateConverter implements Converter ··
23、; public Object convert(Class type, Object value) · System.out.println("value= " + value); · if (null = value) · return value; · · if (value instanceof Date) · return value; · · Date d = null; · if (value instanceof String) · SimpleDateForm
24、at sdf = new SimpleDateFormat("yyyy-MM-dd"); · try · d = sdf.parse(String)value); · catch (ParseException e) · / TODO Auto-generated catch block · e.printStackTrace(); · · · return d; · ·· package com.twh.struts;import java.text.ParseE
25、xception;import java.text.SimpleDateFormat;import java.util.Date;import mons.beanutils.Converter;/* java.util.Date类型转换器* author Administrator*/public class UtilDateConverter implements Converter public Object convert(Class type, Object value) System.out.println("value= " + value);if (null
26、= value) return value;if (value instanceof Date) return value;Date d = null;if (value instanceof String) SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");try d = sdf.parse(String)value); catch (ParseException e) / TODO Auto-generated catch blocke.printStackTrace();return d;2、通过ser
27、vlet注册 Java代码 · package com.twh.struts; ·· import javax.servlet.ServletException; · import javax.servlet.http.HttpServlet; ·· import mons.beanutils.ConvertUtils; ·· /* · * 注册java.util.Date转换器 · * author Administrator · * · */ · public
28、class UtilDateConverterInitWithServlet extends HttpServlet ·· Override · public void init() throws ServletException · /注册java.util.Date转换器 · ConvertUtils.register(new UtilDateConverter(), java.util.Date.class); · ··· package com.twh.struts;import javax.se
29、rvlet.ServletException;import javax.servlet.http.HttpServlet;import mons.beanutils.ConvertUtils;/* 注册java.util.Date转换器* author Administrator*/public class UtilDateConverterInitWithServlet extends HttpServlet Overridepublic void init() throws ServletException /注册java.util.Date转换器ConvertUtils.register
30、(new UtilDateConverter(), java.util.Date.class);3、在web.xml中配置(load-on-startup在web服务器启动时候初始化,只要大于0的值就行) Java代码 · <servlet> · <servlet-name>UtilDateConverterInitWithServlet</servlet-name> · <servlet-class>com.twh.struts.UtilDateConverterInitWithServlet</servle
31、t-class> · <load-on-startup>4</load-on-startup> · </servlet> <servlet><servlet-name>UtilDateConverterInitWithServlet</servlet-name><servlet-class>com.twh.struts.UtilDateConverterInitWithServlet</servlet-class><load-on-startup>4</l
32、oad-on-startup></servlet>- 另一种方法 2、实现PlugIn接口 Java代码 · package com.twh.struts; ·· import javax.servlet.ServletException; ·· import mons.beanutils.ConvertUtils; · import org.apache.struts.action.ActionServlet; · import org.apache.struts.action.PlugIn; · import org.apache.struts.config.ModuleConfig; ·· /*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 讲述一种材料课件
- 咯血并发症的护理
- 安全五确认培训知识
- 产科围手术护理
- 三位数乘两位数过关自测训练题带答案
- 《汽车业外语》课件
- 安徽省马鞍山市2022届高三下学期第二次教学质量检测(二模)化学试卷
- 医疗行业数据分析
- 大学生恋爱班会活动
- 微课马尔可夫分析法财经管理人力资源管理系副教授
- 我是节电小能手课件
- Module 5 Unit 1教案 初中英语 外研版 八年级上册 (2022学年)
- 2022年泰安技师学院教师招聘笔试题库及答案解析
- 人教版九年级下册道德与法治全册教案完整版教学设计含教学反思
- 六年级上册数学课件-6.1 分数混合运算 |西师大版 (共15张PPT)
- 建筑工程勘察项目-技术标
- 道路运输企业职业安全健康管理工作台帐(全版通用)参考模板范本
- 大马大马告诉我
- TSG 81-2022 场(厂)内专用机动车辆安全技术规程
- 口腔组织病理学教学课件:牙源性肿瘤
- 通用模板-封条模板
评论
0/150
提交评论