struts空字段和类型转换器_第1页
struts空字段和类型转换器_第2页
struts空字段和类型转换器_第3页
struts空字段和类型转换器_第4页
struts空字段和类型转换器_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论