自定义类型转换器

    技术2022-05-18  13

    java.util.Date类型的属性可以接受格式为xxxx-xx-xx的请求参数值,但如果需要接受格式为xxxxxxxx的请求参数,必须自定义类型转换器,否则struts2无法自动完成类型转换。

    Person类:

    package com.go123.bean; import java.util.Date; public class Person { //用户名 private String username; //生日 private Date birthday; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }

    DemoAction类:

    package com.go123.action; import com.go123.bean.Person; public class DemoAction { private Person person; public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } public String execute(){ return "success"; } public String add(){ return "success"; } }  

    自定义转换器DateConverter:

    package com.go123.conversion; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; public class DateConverter extends DefaultTypeConverter { @Override public Object convertValue(Map<String, Object> context, Object value, Class toType) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); try{ if(toType==Date.class){//当字符串向Date类型转换时 //reqeust.getParameterValues(); String [] params = (String[])value; return dateFormat.parse(params[0]); }else if(toType==String.class){//当Date转换成字符串时 Date date = (Date)value; return dateFormat.format(date); } }catch (Exception e) { e.printStackTrace(); } return null; } }  

    struts.xml的配置:

    <package name="base" namespace="/login" extends="struts-default"> <action name="test" class="com.go123.action.DemoAction" method="add"> <result name="success">/message.jsp</result> </action> </package> 

    登录页面login.jsp:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <title>登录页面</title> <body> <form action="<%=request.getContextPath() %>/login/test" method="post"> 用户名:<input type="text" name="person.username"><br/> 生日:<input type="text" name="person.birthday"><br/> <input type="submit" /> </form> </body> </html>  

    结果显示页面message.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <title>显示页面</title> <body> 用户名:${person.username}<br/> 生日:${person.birthday}<br/> </body> </html>  

    自定义类型转换器又可以分为局部类型转换器和全局类型转换器

    1.局部类型转换器

    在Action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是Action的类名,后面的为固定写法。

    对于上面的而言,文件名应该为DemoAction-conversion.properties.

    properties的内容为: 属性名称=类型转换器的全类名

    对于上面的而言,DemoAction-conversion.properties的内容为:

    person.birthday=com.go123.conversion.DateConverter 

    2.全局类型转换器

    在src目录下面建立xwork-conversion.properties文件。

    文件中的内容为:待转换的类型=类型转换器的全类名

    对于上面的而言,xwork-conversion.properties文件中的内容为:

    java.util.Date=com.go123.conversion.DateConverter 

     

    在login.jsp页面输入: 用户名:go123   生日: 19891207

    在message.jsp页面显示:用户名:go123  生日:Thu Dec 07 00:00:00 CST 1989

     

     


    最新回复(0)