疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

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 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:

  xxxx

  /index.jsp

  然后:MyJsp.JSP

  最后:index.JSP

  name=${name}

  id= ${id}

  brithday=${brithday}

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

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

  只要改properties文件:

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

  xwrok-conversion.properties

  在里面的内容:

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

  所以是这么写

  Java.util.Date=com.fish.DateTypeChange

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