• struts2学习笔记之十一:struts2的类型转换器


    Struts2的类型转换器
     
    如何实现Struts2的类型转换器?
    * 继承StrutsTypeConverter
    * 覆盖convertFromString和convertToString
     
    注册类型转换器
    * 局部类型转换器,局部类型转换器只对当前Action起作用,需要提供如下配置文件:
    MyActionName-conversion.properties,MyActionName指需要使用转换器的Action名称
    ”-conversion.properties“固定字符串,不能修改。我们AddUserAction类型转换器的配置
    文件名称为:AddUserAction-conversion.properties,该配置文件必须和Action放到同一个
    目录中,该配置文件的格式为:Action中的属性名称=转换器的完整路径,如:
    birthday=com.bjpowernode.struts2.UtilDateConverter
    * 全局类型转换器,全局类型转换器可以是所有的Action起作用(同Struts1的类型转换器),
    需要提供如下配置文件:xwork--conversion.properties,该配置文件需要放到src下,该
    配置文件的格式:需要转换的类型完整路径=转换器的完整路径,如:
    java.util.Date=com.bjpowernode.struts2.UtilDateConverter
    如果全局类型转换器和局部类型转换器同时存在,局部优先
     
    Struts2的标签库就一个,默认以s开头
    采用标签读取属性,可以调用转换器的convertToString方法,采用JSTL不会调用
     
    struts2在填充属性时有内置的类型转换器,但是不是所有的类型struts2都做了类型转换
    当使用该日期格式时,struts2不能进行自动类型转换
     
    书写类型转换器类
    DateConverter.java
    package com.djoker.struts2;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;
    
    import org.apache.struts2.util.StrutsTypeConverter;
    
    public class DateConverter extends StrutsTypeConverter{
    
        private static final String pattern = "yyyy/MM/dd";
        
        @Override
        public Object convertFromString(Map context, String[] values, Class toClass) {
            String dateStr = values[0];
            Date date = null;
            try {
                date = new SimpleDateFormat(pattern).parse(dateStr);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return date;
        }
    
        @Override
        public String convertToString(Map context, Object o) {
            Date date = (Date)o;
            String dateStr = new SimpleDateFormat("yyyy年MM月dd日").format(date);
            return dateStr;
            
        }
    
    }
    添加类型转换器的配置文件UserAction-conversion.properties(局部类型转换器)
    createDate=com.djoker.struts2.DateConverter
     
    Action类UserAction.java
    package com.djoker.struts2;
    
    import java.util.Date;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.Action;
    
    public class UserAction {
    
        private String username;
        
        private String password;
        
        private Date createDate;
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public Date getCreateDate() {
            return createDate;
        }
    
        public void setCreateDate(Date createDate) {
            this.createDate = createDate;
        }
        
        public String addUser() throws Exception {
            ServletActionContext.getRequest().setAttribute("username", username);
            ServletActionContext.getRequest().setAttribute("password", password);
            ServletActionContext.getRequest().setAttribute("createDate", createDate);
            return Action.SUCCESS;
        }
    }
    成功页面success.jsp
    <%@ page language="java" contentType="text/html; charset=GB18030"
        pageEncoding="GB18030"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>登录成功</h1>
    ${msg }<br>
    ${username }<br>
    ${password }<br>
    ${createDate }<br>
    <s:property value="createDate"/>
    </body>
    </html>

    最终演示效果

     
  • 相关阅读:
    图灵2010.05书讯
    上海.NET技术交流会
    图灵2010.07书讯
    高效模式编写者的7个习惯
    QRCode 二维码开源DLL
    javascript 复习
    关于反射技术
    数字签名与加密解密
    使用负载均衡技术建设高负载的网络站点
    dreamweaver cs5.5中的phonegap升级测试
  • 原文地址:https://www.cnblogs.com/djoker/p/6219063.html
Copyright © 2020-2023  润新知