zoukankan      html  css  js  c++  java
  • 十二、类型转换

    十二、类型转换:

    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-INFclasses目录下建立一个固定名称的配置文件: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表示为:表单的字段名称

        

  • 相关阅读:
    C++输入输出缓冲区的刷新问题
    C++11中新特性之:initializer_list详解
    GCC --verbose选项, -lpthread 和-pthread的区别
    C语言的可变参数
    YCM的安装与配置
    【机器学习】正则化的线性回归 —— 岭回归与Lasso回归
    一文读懂线性回归、岭回归和Lasso回归
    美团酒旅数据治理实践
    kettle完成一个数据库到另一个数据的整体迁移
    kettle完成一个数据库到另一个数据的整体迁移
  • 原文地址:https://www.cnblogs.com/Prozhu/p/5886423.html
Copyright © 2011-2022 走看看