Struts2自定义类型转换器

来源:互联网 发布:阿里云tv怎么换主页 编辑:程序博客网 时间:2024/06/16 13:25

重要重要:以后一定要导对包,到错了一个包纠结了一天重点内容

一、Struts2中有自带类型转换器也有自定义类型转换器

  1)比如表单提交的信息有 用户名,生日, 年龄, Action中对应的数据类型分别
  是 String, Date, int.没什么好说的, Struts2会自动完成.

  2)Struts2内建了常用的类型转换器,如String ,boolean,char,int,long,float,double,Date, 数组
  (假定元素是String类型),
  集合(假定元素是String类型,用ArrayList封装)

实现自定义类型转换器
  1) 实现TypeCoverter接口,或者继承DefaultTypeConverter实现类
  (该类实现了TypeCoverter接口),通过继承该实现类来实现自己的
  类型转换器。重写convertValue方法即可。

  为了简化类型转换器的实现,Struts2提供了一个StrutsTypeConverter抽
  象类,这个抽象类是DefaultConverter的子类。实现了方法,并提供了2个
  不同转换方向的方法:
  Object convertToString(Map context,String[] values,Class toClass)和String convertFromString(Map context,Object o)
  二、实现自定义转换器
  1)Action类 ConversionAction.java

package com.app.action;import java.util.Date;import com.opensymphony.xwork2.ActionSupport;public class ConversionAction extends ActionSupport{    private static final long serialVersionUID = 1L;    private int age;    private Date birthday;    public ConversionAction() {        System.out.println("执行。。");    }    public Date getBirthday() {        return birthday;    }    public void setBirthday(Date birthday) {        this.birthday = birthday;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String execute()    {        System.out.println("执行了");        System.out.println("age: "+age);        System.out.println("birthday: "+birthday);        return "success";    }}

2)实现转换的转换器类DateConverter.java

package com.app.action;import java.util.Date;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;import com.opensymphony.xwork2.conversion.TypeConversionException;public class DateConverter extends StrutsTypeConverter {    private final DateFormat[] dfs={        new SimpleDateFormat("yyyy年MM月dd日"),        new SimpleDateFormat("yyyy-MM-dd"),        new SimpleDateFormat("yyyy/MM/dd"),        new SimpleDateFormat("yyyy.MM.dd")    };    //把字符串转化为对象    public Object convertFromString(Map context, String[] values, Class toClass) {        System.out.println("转换中。。。");        //获取日期的字符串        String dateStr=values[0];        System.out.println("输出日期了");        System.out.println(dateStr);        //遍历格式日期,进行转化        for(int i=0;i<dfs.length;i++){            try {                return dfs[i].parse(dateStr);            } catch (Exception e) {                continue;            }        }        //若没有转换成功 则抛出异常        throw new TypeConversionException();    }    @Override    public String convertToString(Map context, Object object) {        System.out.println("输出结果啊");        Date date=(Date)object;        System.out.println("date: "+date);        System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));        return new SimpleDateFormat("yyyy-MM-dd").format(date);        //转换失败返回null    }}

3)简单页面1.jsp和success.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body>    <s:form action="testConversion" theme="simple">    Age: <s:textfield name="age" label="Age"></s:textfield>        ${fieldErrors.age[0] }        ^<s:fielderror fieldName="age"></s:fielderror>        <br><br>        Birth: <s:textfield name="birthday"></s:textfield>        <s:fielderror fieldName="birthday"></s:fielderror>        <br><br>        <s:submit></s:submit>    </s:form></body></html>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body>    Age: <s:property value="age"/>    <br><br>    Birth: <s:property value="birthday"/>    <br><br></body></html>

4)配置文件struts.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"    "http://struts.apache.org/dtds/struts-2.3.dtd"><struts><!-- 设置用户界面主题,默认值为xhtml风格 --><constant value="simple" name="struts.ui.theme"/><!-- 中文乱码 --><constant value="utf-8" name="struts.i18n.encoding"/><package name="test" extends="struts-default" namespace="/"><action name="testConversion" class="com.app.action.ConversionAction">        <result name="success">/success.jsp</result>        <result name="input">/index.jsp</result>    </action></package></struts>

5)Action类与转换器类匹配文件
Conversion-Action-conversion.properties

birthday=com.app.action.DateConverter#java.util.Date=com.app.action.DateConverter
原创粉丝点击