Struts2框架的自定义类型转换器
Posted 葉子。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2框架的自定义类型转换器相关的知识,希望对你有一定的参考价值。
前言:对于java的基本数据类型及一些系统类(如Date类、集合类),Struts2提供了内置类型转换功能,但是也有一定的限制。所以就演示出自定义类型转换器
一、应用于局部类型转换器
eg、用户登录出生日期只能用2016-06-09的方式才能转化成功,那么2016/06/09就不能转换成功所以就引出来我们的自定义类型转换器
1首先我们将做准备工作
1)login.jsp注册页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>注册</title> </head> <body> <form action="adduseraction" method="post"> 用户名:<input type="text" name="user.name"/><br/> 年龄:<input type="text" name="user.age"/><br/> 出生日期<input type="text" name="user.birthday"/><br/> <input type="submit" value="提交"/> </form> </body> </html>
2)将准备成功页面success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>成功页面</title> </head> <body> <s:property value="user.birthday"/> </body> </html>
3)将准备实体类User
public class User { private String name; private String age; private Date birthday; //省略get和set }
4)将准备一个Action类
package cn.happy.action; import cn.happy.entity.User; import com.opensymphony.xwork2.ActionSupport; public class AddUserAction extends ActionSupport{ private User user; @Override public String execute() throws Exception { System.out.println(user.getBirthday()); return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
5)将准备AddUserAction-conversion.properties这个名字前部分AddUserAction要和Action类名相同;由于是局部的所以Action要和AddUserAction-conversion.properties放在同一个目录
6)准备转换器
package cn.happy.converter; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.opensymphony.xwork2.conversion.TypeConversionException; public class DateConverter extends StrutsTypeConverter { private final DateFormat[] dfs={ new SimpleDateFormat("yyyy/MM/dd") }; @Override public Object convertFromString(Map context, String[] values, Class toType) { String dateStr=values[0];//获取日期的字符串 for (int i = 0; i < dfs.length; i++) { try { return dfs[i].parseObject(dateStr); } catch (ParseException e) { continue; } } //如果遍历完毕后仍没有转换成功,表明出现转换异常 throw new TypeConversionException(); } @Override public String convertToString(Map context, Object obj) { return new SimpleDateFormat("yyyy/MM/dd").format(obj); } }
7)准备一个adduseraction.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts > <constant name="struts.devMode" value="true" /> <!--创建一个default包,继承自Struts2的struts-default包 --> <package name="default" namespace="" extends="struts-default"> <action name="adduseraction" class="cn.happy.action.AddUserAction" > <!-- 通过param参数设置保存目录路径 --> <result name="success">/Convert/success.jsp</result> <result name="input">/Convert/login.jsp</result> </action> </package> </struts>
8)在struts.xml引用一个adduseraction.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts > </package> --> <include file="adduseraction.xml"></include> </struts>
二、全局自定义类型转换器
在以上步骤下改
AddUserAction-conversion.properties--->复制到src的目录下----->改名为xwork-conversion.properties--->在文件里
三、我们将在出生日期中如果出错的话我们要给予提示!!!
1)在全局变量的情况下我们首先要在改变类型转换器添加
new SimpleDateFormat("yyyy年MM月dd日")
package cn.happy.converter; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.opensymphony.xwork2.conversion.TypeConversionException; public class DateConverter extends StrutsTypeConverter { private final DateFormat[] dfs={ new SimpleDateFormat("yyyy/MM/dd"), new SimpleDateFormat("yyyy年MM月dd日") }; @Override public Object convertFromString(Map context, String[] values, Class toType) { String dateStr=values[0];//获取日期的字符串 for (int i = 0; i < dfs.length; i++) { try { return dfs[i].parseObject(dateStr); } catch (ParseException e) { continue; } } //如果遍历完毕后仍没有转换成功,表明出现转换异常 throw new TypeConversionException(); } @Override public String convertToString(Map context, Object obj) { return new SimpleDateFormat("yyyy/MM/dd").format(obj); } }
如果你页面输入错误会报一个错误就是字段无效。-----》如何给英文字段转换给中文
在strurts.xml中配置 <constant name="struts.custom.i18n.resources" value="message"/>是国际化
在配置一个message.properties在根目录src下
这样页面报错的就会显示中文了
以上是关于Struts2框架的自定义类型转换器的主要内容,如果未能解决你的问题,请参考以下文章