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

Posted 愤怒的绿萝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>

 

最终演示效果

 

以上是关于struts2学习笔记之十一:struts2的类型转换器的主要内容,如果未能解决你的问题,请参考以下文章

struts2学习笔记之十四:使用注解配置Action(不是和spring集成使用)

struts2学习笔记之十三:自定义过滤器

struts2学习笔记之七:Result类型

struts2学习笔记-------struts2的ajax支持

Struts2学习笔记 - 结果类型result

Struts2-学习笔记系列(13)-类型转换异常和校验器