• 类型转换


    将某些类型的数据转换成固定的形式

    比如说:

    new SimpleDateFormat("yyyy 年MM 月dd 日"),
    new SimpleDateFormat("yyyy-MM-dd"),
    new SimpleDateFormat("MM/dd/yy"),
    new SimpleDateFormat("yyyy.MM.dd"),
    new SimpleDateFormat("yyMMdd"),
    new SimpleDateFormat("yyyy/MM/dd") };

    首先创建一个jsp页面去接受收入数据的类型:

    <%@ taglib prefix="s" uri="/struts-tags" %>
      <body>
       <s:form action="dateConvert.action">
                    <div class="infos">
                        <table class="field">
                            <tr>
                                <td class="field">请输入日期:</td>
                                <td><input type="text" class="text" name="timeDate" /></td>
                            </tr>
                            <s:fielderror />
                        </table>
                        <div class="buttons">
                        <s:submit value="转换格式"/>
                        </div>
                    </div>
                </s:form>
      </body>

    2.上边的页面会将数据交给dateConvert处理,dateConvert类由于要处理数据转换方面的问题,所以继承了StrutsTypeConverter

    具体代码如下:

    package cn.jbit.util;
    
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    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("MM/dd/yy"),
                new SimpleDateFormat("yyyy.MM.dd"), 
                new SimpleDateFormat("yyMMdd"),
                new SimpleDateFormat("yyyy/MM/dd") };
    
        /**
         * 将指定格式字符串转换为日期类型。
         */
        public Object convertFromString(Map context, String[] values, Class toType) {
            String dateStr = values[0];// 获取日期的字符串
            for (int i = 0; i < dfs.length; i++) {// 遍历日期支持格式,进行转换
                try { //2012/12/12
                    return dfs[i].parse(dateStr);  //进行格式的比较
                } catch (Exception e) {
                    continue;
                }
            }
            throw new TypeConversionException("转换错误");
        }
    
        public String convertToString(Map context, Object object) {
            Date date = (Date) object;
            // 输出的格式是yyyy-MM-dd
            return new SimpleDateFormat("yyyy-MM-dd").format(date);
        }
    }

    上述类可以说是用来做类型转换的一个自定义的手工的工具类,现在做的需要真正的转换字符串

    创建出一个数据转换的action类,如下:

    package cn.jbit.action;
    
    import java.util.Date;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class DateConvertAction extends ActionSupport {
        //定制成员变量TIMEDATE  时间
        private Date timeDate;
        public String execute(){
            return SUCCESS;
        }
        public Date getTimeDate() {
            return timeDate;
        }
    
        public void setTimeDate(Date timeDate) {
            this.timeDate = timeDate;
        }
    }

    我们可以通过两种方式吧工具类和真正的action类做一个关联:

    1.可以创建一个全局类型的转换器

    转换类全名=类型转换器类的全名(文件名为xword.conversion.properties)的属性文件,里边配置为:

    java.util.Date=cn.jbit.util.DateConverter 

    这是适合于多个action的全局的

    2.可以创建一个相对于单个action的属性文件:ClassName.conversion.properties

    其内容为特定类的属性名=类型转换器的全名

    完成之后可以做一些处理类型转换错误的操作:

    1.前提条件:>启动strusConversionErrorInterceptor拦截器,该拦截器包含在defaultStack拦截器栈中,参看struts-defatul.xml文件,如果在struts.xml中扩展了"struts-default"包,启动项目时会自动加载

    >实现validationAware接口,ActionSupport实现了该接口

    >配置input结果映射,出现错误之后,停留到该页面

    >再页面使用<s:fielderror>标签来输出转换的错误.

    2.修改所有类型的转换错误信息

    <constant name ="struts.custom.i18n.resources" value="message">

    创建资源文件message.properties ,并添加文本:

    xwork.default.invalid.fieldvalue=field"{0}"'s value is invalid

    3.定制特定字段的类型转换错误信息在action 同级目录下 DateConvertAction.properties

    invalid.fieldvalue.timeDate

    日期格式错误

  • 相关阅读:
    eclipse里maven项目An error occurred while filtering resources解决办法
    python中分页使用
    es学习
    cmdb资产管理2
    saltstack安装使用
    Django Rest Framework
    免交互批量分发公钥的实现
    单链表复制早已难不到你,但若我们再加个指针...
    面试 16:栈的压入压出队列(剑指 Offer 第 22 题)
    面试 15:顺时针从外往里打印数字(剑指 Offer 第 20 题)
  • 原文地址:https://www.cnblogs.com/myhome-1/p/5946011.html
Copyright © 2020-2023  润新知