zoukankan      html  css  js  c++  java
  • Struts2框架的自定义类型转换器

      前言:对于java的基本数据类型及一些系统类(如Date类、集合类),Struts2提供了内置类型转换功能,但是也有一定的限制。所以就演示出自定义类型转换器

    一、应用于局部类型转换器

      eg、用户登录出生日期只能用2016-06-09的方式才能转化成功,那么2016/06/09就不能转换成功所以就引出来我们的自定义类型转换器

      1首先我们将做准备工作

        1)login.jsp注册页面  

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>注册</title>
       
    
      </head>
      
      <body>
        <form action="adduseraction" 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>

      2)将准备成功页面success.jsp

    <%@ 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>成功页面</title>
        
      </head>
      
      <body>
        <s:property value="user.birthday"/>
      </body>
    </html>

      3)将准备实体类User

    public class User {
        private String name;
        private String age;
        private Date birthday;
            //省略get和set
    }    

      4)将准备一个Action类

    package cn.happy.action;
    
    import cn.happy.entity.User;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class AddUserAction extends ActionSupport{
        private User user;
        
        @Override
        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;
        }
        
    }

      5)将准备AddUserAction-conversion.properties这个名字前部分AddUserAction要和Action类名相同;由于是局部的所以Action要和AddUserAction-conversion.properties放在同一个目录

    6)准备转换器

    package cn.happy.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 {
        
        
        private final DateFormat[] dfs={
                new SimpleDateFormat("yyyy/MM/dd")
        };
        @Override
        public Object convertFromString(Map context, String[] values, Class toType) {
            String dateStr=values[0];//获取日期的字符串
            for (int i = 0; i < dfs.length; i++) {
                try {
                    return dfs[i].parseObject(dateStr);
                } catch (ParseException e) {
                    
                    continue;
                }
            }
            //如果遍历完毕后仍没有转换成功,表明出现转换异常
            throw new TypeConversionException();
            
        }
    
        @Override
        public String convertToString(Map context, Object obj) {
            
            return new SimpleDateFormat("yyyy/MM/dd").format(obj);
        }
    
    }

      7)准备一个adduseraction.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" />
       
        <!--创建一个default包,继承自Struts2的struts-default包  -->
        <package name="default" namespace="" extends="struts-default">
        
            
            
            <action name="adduseraction" class="cn.happy.action.AddUserAction" >
            <!-- 通过param参数设置保存目录路径 -->
            
            <result name="success">/Convert/success.jsp</result>
            <result name="input">/Convert/login.jsp</result>
            </action>
            
            
            
        </package>
    
            
        
        
    
    </struts>

      8)在struts.xml引用一个adduseraction.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 >    
        </package> -->
        <include file="adduseraction.xml"></include>
    </struts>

    二、全局自定义类型转换器

    在以上步骤下改

    AddUserAction-conversion.properties--->复制到src的目录下----->改名为xwork-conversion.properties--->在文件里

    三、我们将在出生日期中如果出错的话我们要给予提示!!!

      1)在全局变量的情况下我们首先要在改变类型转换器添加

       new SimpleDateFormat("yyyy年MM月dd日")
    package cn.happy.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 {
        
        
        private final DateFormat[] dfs={
                new SimpleDateFormat("yyyy/MM/dd"),
                new SimpleDateFormat("yyyy年MM月dd日")
        };
        @Override
        public Object convertFromString(Map context, String[] values, Class toType) {
            String dateStr=values[0];//获取日期的字符串
            for (int i = 0; i < dfs.length; i++) {
                try {
                    return dfs[i].parseObject(dateStr);
                } catch (ParseException e) {
                    
                    continue;
                }
            }
            //如果遍历完毕后仍没有转换成功,表明出现转换异常
            throw new TypeConversionException();
            
        }
    
        @Override
        public String convertToString(Map context, Object obj) {
            
            return new SimpleDateFormat("yyyy/MM/dd").format(obj);
        }
    
    }

      如果你页面输入错误会报一个错误就是字段无效。-----》如何给英文字段转换给中文

    在strurts.xml中配置 <constant name="struts.custom.i18n.resources" value="message"/>是国际化

    在配置一个message.properties在根目录src下

     这样页面报错的就会显示中文了

  • 相关阅读:
    Network Embedding 论文小览
    DLRS(深度学习应用于推荐系统论文汇总--2017年8月整理)
    深度语义匹配模型-DSSM 及其变种
    python 按值排序
    python 日期排序
    推荐领域数据集
    EPS 转 pdf 在线
    梯度下降法的三种形式BGD、SGD以及MBGD
    Daily paper -Science 2006: Experimental Study of Inequality and Unpredictability in an Artificial Cultural Market (探究群体行为对商品销量的影响)
    2017年Nature文章“Millions of online book co-purchases reveal partisan differences in the consumption of science”阅读笔记
  • 原文地址:https://www.cnblogs.com/yejiaojiao/p/5859679.html
Copyright © 2011-2022 走看看