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";@Overridepublic 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;}@Overridepublic 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>
最终演示效果