• 类型转换


    struts2的自定义类型转换机制为复杂类型的输入输出处理提供了便捷.struts2已经为我们提供了几乎所有的primitive类型以及常用类型(如Date)的类型转换器,我们也可以为我们自定义类添加自定义类型转化器.

    下面来看一下自定义类型转换

    package entity;

    import java.util.Date;

    public class User {
        private String name;//姓名
        private Integer age;//年龄
        private Date birthday;//出生日期
        public String getName() {
            return name;
        }
        public Integer getAge() {
            return age;
        }
        public Date getBirthday() {
            return birthday;
        }
        public void setName(String name) {
            this.name = name;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
       
       
    }

    package action;

    import com.opensymphony.xwork2.ActionSupport;

    import entity.User;

    public class AddUserAction extends ActionSupport  {
        //调用实体类
        private User user;
        public String execute() throws Exception{
            //在此我们就用出生日期来实现一下
            System.out.println(user.getBirthday());
            return SUCCESS;
           
        }


        public User getUser() {
            return user;
        }


        public void setUser(User user) {
            this.user = user;
        }
       

    }

    package converter;

    import java.text.DateFormat;
    import java.text.ParseException;
    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{
           //将前台获取到的值转换成Date类型
           private final DateFormat[] dfs={
                   new SimpleDateFormat("yyyy/MM/dd"),
                   new SimpleDateFormat("yyyy年MM月dd日"),
                   new SimpleDateFormat("yyyy-MM-dd"),
                   new SimpleDateFormat("yyyy.MM.dd"),
                   new SimpleDateFormat("yyyyMMdd"),
                   new SimpleDateFormat("MM/dd/yyyy"),
           };

       
        /**
         * String类转换成特定的类
         * 用于前台传值到后台
         */
        @Override                //context里的map对象     前台创来的值               
        public Object convertFromString(Map context, String[] values, Class toType) {
            String value=(String)values[0];
            for (int i = 0; i < dfs.length; i++) {
                try {
                    return dfs[i].parse(value);
                } catch (ParseException e) {
                    // TODO Auto-generated catch block
                    continue;
                }
            }
            throw new TypeConversionException();
        }
        /**
         * 前台取值
         *
         */
        @Override
        public String convertToString(Map context, Object obj) {
           
           
            return new SimpleDateFormat("yyyy-MM-dd").format(obj);
        }

    }

    <?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>
        <constant name="struts.devMode" value="true"></constant>
        <package name="default" namespace="/" extends="struts-default">
            <action name="AddUser" class="action.AddUserAction">
                <result name="success">/success.jsp</result>
            </action>
        </package>
       
    </struts>

    struts2自定义类型转换从大的方面来讲分两种:

    u      局部类型转换

    u      全局类型转换

    局部类型转换又分为三种:

    ²       普通实体bean的自定义类型转换

    ²       基于领域模型的自定义类型转换

    ²       基于模型驱动的自定义类型转换

    无论是全局类型转换还是局部类型转换,转换器与Action之间是用properties文件来关联的,properties文件指明了转换规则

           全局类型转换规则:

           在classpath下新建文件xwork-conversion.properties(固定名称)

           其内容为:目标转换对象=转换器类(包名+类名)

           局部类型转换规则:

           在对应的Action的同级目录下新建Action名-conversion.properties(一定要与Action类名对应)

           其内容为: 目标转换对象=转换器类(包名+类名)

           在局部类型转换中又存在一种特殊情况

           基于领域模型的自定义类型转换

       它不但要在对应的Action的同级目录下新建Action名-conversion.properties(一定要与Action类名对应)文件,还需在引用模型同级目录下建properties文件取名规则为引用名- conversion.properties

  • 相关阅读:
    3.for in循环
    2.break与continue
    1.XHTML框架结构
    lamda表达式在EF中的应用
    View数据呈现相关技术
    ASP.NET MVC 4 技术讲解
    ASP.NET MVC 相关的社群与讨论区
    C# 随机红包算法
    圆圈里带 小写字母,大写字母
    使用SQL语句 检测 MSSQL死锁
  • 原文地址:https://www.cnblogs.com/LJN520/p/5960197.html
Copyright © 2020-2023  润新知