Struts2类型转换
2014-02-03 13:52
363 查看
/* * 自定义转换器: * * 作用:就是把页面中createTime元素的字符串内容转换成java.util.Date */ public class DateConverter extends DefaultTypeConverter { @Override public Object convertValue(Object value, Class toType) { //要转换的值:[Ljava.lang.String;@3da850 System.out.println("value = "+value); //要转换的类型:class java.util.Date System.out.println("toType = "+toType); if(value==null){ return false; } if(toType==null){ return false; } if(toType!=java.util.Date.class){ return false; } if(value instanceof java.lang.String[]){ String [] str = (String[])value; if(str[0]!=null&&str[0].length()>0){ try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); return sdf.parse(str[0]); } catch (ParseException e) { /* * 在struts2框架里,自定义的类型转换器, * 如果我们不手动抛出异常,struts2框架只捕获异常,但是并不抛出。 * 所以框架就会认为类型转换器转换成功,转向成功页面。 */ throw new RuntimeException(e); } } } return new Date(); } }
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> 失败!!!! <br> <s:fielderror fieldName="createTime"/> </body> </html>
概述
l从一个HTML表单到一个Action对象,类型转换是从字符串到非字符串.
•HTTP没有 “类型” 的概念.
每一项表单输入只可能是一个字符串或一个字符串数组.
在服务器端,
必须把 String
转换为特定的数据类型
l在
struts2中,把请求参数映射到action属性的工作由Parameters拦截器负责,它是默认的defaultStack拦截器中的一员.Parameters
拦截器可以自动完成字符串和基本数据类型之间转换.
接收请求参数
利用之前学过的知识,接收请求参数HttpServletRequestreq =
ServletActionContext.getRequest();
String userName =
req.getParameter("userName");
采用基本类型接收请求参数
在Action类中定义与请求参数同名的属性,struts2便能通过反射技术自动接收请求参数并赋予给同名属性。
publicclass UserActionextendsActionSupport
{
privateInteger id;
privateString
userName
//struts2通过反射技术调用与请求参数同名的属性的setter方法来获取请求参数值
public void
setId(Integerid) {
this.id = id;
}
public Integer
getId(){return id;}
}
转化失败时,应该转向错误页面
转向错误页面,应该在struts配置文件中,增加如下代码:<action name="userAction_*" class="cn.itcast.converter.UserAction"
method="(1)">
<result name="success">/converter/success.jsp</result>
<!-- input:当类型转化失败时,要转到input所指向的页面
-->
<result name="input">/converter/error.jsp</result>
</action>
定制类型转换器说明
定制类型转换器说明—底层代码
定制类型转换器1
publicclassDateConverterextendsDefaultTypeConverter {publicObject
convertValue(Map<String, Object> context,Object value, Class
toType) {
System.out.println("value = "+value);
System.out.println("toType
= "+toType);
returnnew Date();
}
}
配置自定义的类型转换器
在应用程序里使用一个自定义的类型转换器之前,必须先对它进行配置.
这种配置既可以基于字段,
也可以基于类
基于字段配置(局部):
可以为某个动作的各个属性分别制定一个自定义的转换器.
1.创建一个属性文件:
ActionClassName-conversion.properties,
该文
件需和相对应的动作类(Action)放在同一个目录下,
ActionClassName是Action的类名,后面的-conversion.properties
是固定写法.
在properties文件中的内容为:
属性名称=类型转换器的全类名
对于本例而言,文件的名称应为UserAction-conversion.properties
2. 编辑属性文件:
createTime=cn.itcast.converter.DateConverter
定制类型转换器2
* context:* value:要转换的值,是一个数组,因为struts2底层接
收值都用request.getParameterValues("createTime")--String[]
* toType:要转换的数据类型
public Object
convertValue(Map<String, Object> context,Object value,
ClasstoType) {
System.out.println("value = "+value);
System.out.println("toType
= "+toType);
returnnew Date();
}
定制类型转换器3
该转换器完成的功能* 将一个字符串类型的数据转换java.util.Date.class
类型
* 例如yyyymmdd格式的字符串转换为
java.util.Date类型
publicclassDateConverterextendsDefaultTypeConverter {
……
}
配置自定义的类型转换器
定制类型转换器—处理异常1
• 在error.jsp页面中引入<%@ tagliburi="/struts-tags"
prefix="s"%>
• 在error.jsp页面中使用<s:fielderrorfieldName=“
”/>
打印所有转化的异常错误信息
•name:指定Action属性的名称
•打印某个属性转化的异常错误信息
定制类型转换器—处理异常2
定制类型转换器—处理异常3
定制类型转换器—处理异常4
相关文章推荐
- Struts2参数和类型转换
- struts2教程(4)--类型转换
- Struts2开发--类型转换
- Struts2的类型转换器
- Struts2的类型转换
- Struts2的类型自动转换机制
- Struts2之简单数据类型转换
- Struts2学习之类型转换
- Struts2自定义类型转换
- struts2学习(一)类型转换--DefaultTypeConverter
- struts2自定义类型转换(1)基于DefaultTypeConverter
- Struts2的类型转换器
- 浪曦_Struts2应用开发系列_第2讲.Struts2的类型转换-学习笔记
- struts2(七)数据类型转换详解
- Struts2数据类型转换(页面数据库数据类型转换)
- 【Java EE 学习 35 上】【strus2】【类型转换器】【struts2和Servlet API解耦】【国际化问题】【资源文件乱码问题已经解决】
- struts2-OGNL和类型转换(structs 自动数据表单获取)
- Struts2总结---数据类型转换详解 (4)
- Struts2自定义类型转换器分为局部类型转换器和全局类型转换器
- Struts2的类型转换--内建转换器