• 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>

    最终演示效果

     
  • 相关阅读:
    Python3之random模块常用方法
    Go语言学习笔记(九)之数组
    Go语言学习笔记之简单的几个排序
    Go语言学习笔记(八)
    Python3之logging模块
    Go语言学习笔记(六)
    123. Best Time to Buy and Sell Stock III(js)
    122. Best Time to Buy and Sell Stock II(js)
    121. Best Time to Buy and Sell Stock(js)
    120. Triangle(js)
  • 原文地址:https://www.cnblogs.com/djoker/p/6219063.html
Copyright © 2020-2023  润新知