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

    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;
        }
        
        
    }
    复制代码

    接下来我们创建一个AddUserAction

    复制代码
    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);
        }
    
    }
    复制代码

     创建AddUserAction-conversion.properties关联关系

    当我们用到user.birthday属性时会自动调用converter.Dateconverter.java类型转换器

    接下来写配置adduser.xml文件

    复制代码
    <?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>
    复制代码

    接下来配置struts.xml文件并引用adduser.xml文件

    复制代码
    <?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.ui.theme" value="simple"></constant>
    <constant name="struts.devMode" value="false"></constant>
    <constant name="struts.enable.DynamicMethodInvoaction" value="true"></constant>
    <package name="main" namespace="/" extends="struts-default">
    
    </package>
    <include file="action/adduser.xml"></include>
    </struts>
    复制代码

    接下来编写输入与展示页面

    复制代码
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <%@ taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
        
      </head>
      
      <body>
      <s:fielderror/>
       <form action="AddUser" method="post">
           姓名:<input type="text" name="user.name"/><br/>
           年龄:<input type="text" name="user.age"/><br/>
           出生日期:<input type="text" name="user.birthday"/><br/>
           <input type="submit" value="提交"/>
       </form>
      </body>
    </html>
    复制代码

    展示页面

    复制代码
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <%@ taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'success.jsp' starting page</title>
       
      </head>
      
      <body>
        <s:date name="user.birthday"  format="yyyy-MM-dd"/>
      </body>
    </html>
    复制代码

    效果展示

    补充

    分类

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

    u      局部类型转换

    u      全局类型转换

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

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

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

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

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

           全局类型转换规则:

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

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

           局部类型转换规则:

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

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

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

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

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

  • 相关阅读:
    ASP.NET Web API 控制器执行过程(一)
    ASP.NET Web API 控制器创建过程(二)
    ASP.NET Web API 控制器创建过程(一)
    ASP.NET Web API WebHost宿主环境中管道、路由
    ASP.NET Web API Selfhost宿主环境中管道、路由
    ASP.NET Web API 管道模型
    ASP.NET Web API 路由对象介绍
    ASP.NET Web API 开篇示例介绍
    ASP.NET MVC 视图(五)
    ASP.NET MVC 视图(四)
  • 原文地址:https://www.cnblogs.com/superws/p/5960116.html
Copyright © 2011-2022 走看看