/*
* 自定义转换器:
* * 作用:就是把页面中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>
/*
* 自定义转换器:
* * 作用:就是把页面中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>
概述
接收请求参数
利用之前学过的知识,接收请求参数
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();
}
}
配置自定义的类型转换器
在应用程序里使用一个自定义的类型转换器之前, 必须先对它进行配置.
这种配置既可以基于字段, 也可以基于类
基于字段配置(局部): 可以为某个动作的各个属性分别制定一个自定义的转换器.
件需和相对应的动作类(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
<%@ tagliburi="/struts-tags" prefix="s"%>
打印所有转化的异常错误信息
定制类型转换器—处理异常2
定制类型转换器—处理异常3
定制类型转换器—处理异常4