十二、类型转换

十二、类型转换:

1、用户界面传来的数据都是String:String---->其他类型

显示或者是数据回显:其他类型----->String

 

  • 基本类型自动转换。
  • java.util.Date<-------->String(中国:Struts2默认按照yyyy-MM-dd本地格式进行自动转换)

数组 可以将多个同名参数,转换到数组中

 

总结:在使用Struts2时,基本上不用写任何类型转换器。内置的完全够用。

2、自定义类型转换器

String----------------->java.util.Date MM/dd/yyyy----->能转换

java.util.Date--------->String             MM/dd/yyyy

 

步骤:

第一步:

 

  • 编写一个类直接或间接实现:

com.opensymphony.xwork2.conversion.TypeConverter接口。

  • 一般选择继承:

com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter

覆盖掉:

public Object convertValue(Object value, Class toType)

    

public class MyDateConvertor1 extends DefaultTypeConverter {

    private DateFormat df = new SimpleDateFormat("MM/dd/yyyy");

 

    /**

     * value:有可能是String[] 用户输入时:封装到javabean

     * value:有可能是Date 显示时

     * toType:要转换成为的目标类型

     */

    @Override

    public Object convertValue(Object value, Class toType) {

        // 首先判断要转换的类型是否等于Date类型

        if (toType == Date.class) {

            // String ---> Date

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

            try {

                return df.parse(values[0]);

            } catch (ParseException e) {

                throw new RuntimeException(e);

            }

        } else if (toType == String.class) {

            // Date --> String

            return df.format((Date) value);

        } else {

            return null;

        }

    }

}

 

  • 继承org.apache.struts2.util.StrutsTypeConverter(最简单和方便)

     

第二步:注册类型转换器

  • 局部类型转换器:为某个动作类服务的(特服)

在动作类所在的包中,建立一个名称为"动作类名-conversion.properties"的配置文件

 

  • 全局类型转换器:为所有的动作类服务的

在WEB-INF\classes目录下建立一个固定名称的配置文件:xwork-conversion.properties

 

 

3、出现转换失败时的页面转向和错误消息提示

a、配置一个name="input"的结果视图,一般指向用户输入数据的那个页面

<package name="p1" extends="struts-default">

        <action name="action1" class="com.itheima.action.Demo1Action">

            <!-- 出现类型转换失败时:conversionError的拦截器会把页面转向一个叫做input的逻辑视图 -->

            <result name="input">/01.jsp</result>

        </action>

    </package>

 

b、在01.jsp中使用struts2的标签显示字段有关的错误(后面的国际化再讲)

<%@ taglib uri="/struts-tags" prefix="s"%>

    <s:fielderror/>

c、配置提示信息为中文的

在动作类所在的包中,建立一个名称为:动作类名.properties的配置文件

其中的birthday表示为:表单的字段名称

    

posted @ 2016-09-19 19:56  runningto  阅读(313)  评论(0编辑  收藏  举报