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学习笔记之十一: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的类型转换器

 
上一篇:作业2——需求分析&原型设计


下一篇:让Mac OS X专用高速移动硬盘在Linux下也能被读写