Struts2 自定义类型类型转换器

Struts2自定义类型转换器有两种,全局和局部 java.util.Date类型的属性可以接收格式为2009-07-20的请求参数值。但如果我们需要接收格式为20091221的请求参数,我们必须定义类型转换器,否则struts2无法自动完成类型转换。
action代码:
package com.renwen.action;
import java.net.URLEncoder;
import java.util.Date;

import com.renwen.bean.Person;


public class HelloWorldAction {
private Date birthday;

public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String execute() throws Exception{
// System.out.println("ssssssss");
// this.username=URLEncoder.encode("顾刘川", "UTF-8");
//this.message="execute";
return "success";

}
public String other() throws Exception{
//this.message="other";
System.out.println(birthday);
return "success";
}
}
index.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

   
    <title>My JSP 'add.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">   
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
  </head>
 
  <body>
   <form action="<%=request.getContextPath() %>/renwen/test/helloworldother" method="post">
   <!-- id:<input type="text" name="person.id">
   name:<input type="text" name="person.name"> -->
   birthday:<input type="text" name="birthday">
   <input type="submit" value="提交">
   </form>
  </body>
</html>
message.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>第一个struts2应用</title>
  </head>
  <body>
   ${birthday} <br>
 
  </body>
</html>
xml与上节相同,在此省略...
自定义的类型转换器
代码如下:
package com.renwen.type.converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

public class DateConverter extends DefaultTypeConverter {
     public Object convertValue(Map context, Object value, Class toType) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
    try {
    if(toType == Date.class){//当字符串向Date类型转换时
    String[] params = (String[]) value;// Request.getParameterValues()
    return dateFormat.parse(params[0]);
    }else if(toType == String.class){//当Date转换成字符串时
    Date date = (Date) value;
    return dateFormat.format(date);
    }
    } catch (ParseException e) {}
    return null;
    }


}
接下来我们要做的就是将上面的类型转换器注册为局部类型转换器:在Action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是Action的类名,后面的-conversion.properties是固定写法,对于本例而言,文件的名称应为HelloWorldAction-conversion.properties 。在properties文件中的内容为:属性名称=类型转换器的全类名
对于本例而言, HelloWorldAction-conversion.properties文件中的内容为:
birthday= com.renwen.conversion.DateConverter
2.自定义全局类型转化器将上面的类型转换器注册为全局类型转换器:
在WEB-INF/classes下放置xwork-conversion.properties文件 。在properties文件中的内容为:
待转换的类型=类型转换器的全类名
对于本例而言, xwork-conversion.properties文件中的内容为:
java.util.Date= cn.itcast.conversion.DateConverter

你可能感兴趣的:(java,html,jsp,bean,Web)