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

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

    比如说:

    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

    日期格式错误

  • 相关阅读:
    计蒜客
    CodeForces -1216B.Shooting
    关于gets读入因为缓冲区出现的问题
    CodeForces
    Codeforces Round #603 (Div. 2) C.Everyone is A Winner!
    Codeforces Round #603 (Div. 2) A.Sweet Problem
    Codeforces Round #603 (Div. 2)B. PIN Codes
    Codeforces 524C.The Art of Dealing with ATM(暴力)
    Codeforces Round #600 (Div. 2) C. Sweets Eating
    数组的定义和初始化
  • 原文地址:https://www.cnblogs.com/myhome-1/p/5946011.html
Copyright © 2011-2022 走看看