struts2类型转化器详解(带例子)

Struts2有两种类型转化器:

一种局部,一种全局.

 

如何实现:

第一步:定义转化器

第二部:注册转化器

 

 

下面做一个局部类型转化器的实例。

我们在上面一片日志说过有个变量date类型的。只有我们输入格式为yyyy-MM-dd的日期类型才会有效。否则则无效。那么我就需要一个类型转化当输入为yyyy-MM-dd的日期类型也能有效,该怎么做?

这时候我们需要一个自定义的类型转化器。

首先我们定义一个类型转化器

我们的类为:DateTypeChange.java

package com.fish;

 

 

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Map;

 

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

 

publicclass DateTypeChange extends DefaultTypeConverter{//首先得继承默认转化器类

 

    @Override

    public Object convertValue(Map<String, Object> context, Object value,

            Class toType) {//第二个参数是你的要转化的数据就是我们下面test.Javabrithday属性的值,第三个参数是你传进来的数的值

        SimpleDateFormat format=new  SimpleDateFormat("yyyyMMdd");//创建一个日期类型的排版格式。

        try {

            if(toType==Date.class){

                String[] parm=(String[])value;

                return format.parse(parm[0]);

            }elseif(toType==String.class){

                Date date=(Date)value;

                return format.format(date);

            }

        } catch (Exception e) {

           

        }

       

        returnnull;

    }

 

 

}

类型转化器书写完毕,接着应该写一个注册文件关联类型转化器和你想转化属性的那个类(这个文件写在转化器的同一个包下)

书写格式:“要转化的属性的类型(不加包名)”+conversion.properties

文件里面写:brithday=com.fish.DateTypeChange 

 

顺便把其他几个test.Java也写上:

package com.fish;

 

import java.util.Date;

 

 

publicclass Test {

private String name;

private String id;

private Date brithday;

 

public Date getBrithday() {

    returnbrithday;

}

publicvoid setBrithday(Date brithday) {

    this.brithday = brithday;

}

public String getName() {

    returnname;

}

publicvoid setName(String name) {

    this.name = name;

}

public String getId() {

    returnid;

}

publicvoid setId(String id) {

    this.id = id;

}

public String execute(){

   

    return"success";

}

}

接着:Struts2.xml

<package name="fish" namespace="/test" extends="struts-default">

<action name="redfish" class="com.fish.Test" method="execute">

<param name="name">xxxx</param>

<result  name="success">/index.jsp</result>

</action>

然后:MyJsp.JSP

<form action="/struts2test4/test/redfish.action">&nbsp;

    <input type="text"  name="username">

    <input type="text" name="id">

    <input type="text" name="brithday">

<input type="submit" value="确定">

 

最后:index.JSP

name=${name}<br>

  id= ${id}  <br>

 brithday=${brithday}<br>

 

这时我们在index.JSP页面中输入yyyyMMdd类型的日期类型时,struts2也能转化成日期格式处理了。

 

 

当然如果你想写全局转化器。

只要改properties文件:

将他移动到web-inf/classess下,命名是

xwrok-conversion.properties

在里面的内容:

转化的类型(有包名的)=转化器(包名的)

所以是这么写

Java.util.Date=com.fish.DateTypeChange

意思是说对于所有date类型我都可以转化为这种格式处理。 

posted @ 2013-07-13 20:47  爱生活,爱编程  阅读(234)  评论(0编辑  收藏  举报