您的位置:首页 > 编程语言 > Java开发

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

2013-07-13 09:33 363 查看
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.Java的brithday属性的值,第三个参数是你传进来的数的值
        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"> 
    <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类型我都可以转化为这种格式处理。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: