前言:对于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[];//获取日期的字符串
for (int i = ; 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[];//获取日期的字符串
for (int i = ; 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框架的自定义类型转换器的更多相关文章

  1. Struts2初学 struts2自定义类型转换器

    一.问题的引出      Struts2的类型转换是基于OGNL表达式的,由于请求的参数都是字符串,而JAVA 本身属于强类型的的语言,这样就需要把请求参数字符串转换成其他类型.     Struts ...

  2. Struts2之自定义类型转换器

    Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用d ...

  3. [原创]java WEB学习笔记67:Struts2 学习之路-- 类型转换概述, 类型转换错误修改,如何自定义类型转换器

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. struts2自定义类型转换器

    首先,何为struts2的类型转换器? 类型转换器的作用是将请求中的字符串或字符串数组参数与action中的对象进行相互转换. 一.大部分时候,使用struts2提供的类型转换器以及OGNL类型转换机 ...

  5. struts2基础---->自定义类型转换器

    这一章,我们开始struts2中自定义类型转换器的学习. 自定义类型转换器

  6. [JavaWeb基础] 013.Struts2 自定义类型转换器

    很多时候,我们在做web开发的时候经常要用到时间的转换器,Struts2给我们提供了一种类型转换器的接口.下面我们讲讲怎么实现吧. 1.首先我们要定义一个类型转换的类,继承自com.babybus.s ...

  7. sruts2 自定义类型转换器

    1.1.1    Struts2中自定义类型转换器:(了解) 类型转换的过程是双向的过程: JSP---->Action参数提交:String---Date. Action---->JSP ...

  8. 自定义类型转换器converter

    作用:目前将日期转换成string,将string转换成我想要的类型   0509课件里讲 一.数据类型转换在web应用程序中,数据存在两个方向上的转换:1.当提交表单时  表单数据以字符串的形式提交 ...

  9. Struts2基础学习(四)—类型转换器和数据校验

    一.自定义类型转换器 1.概述      Struts2提供了常规类型转换器,可以用于常用数据类型的转换,但如果目标类型是一个特殊类型,则需要自定义转换器.Struts2 类型转换器实际上都是基于OG ...

随机推荐

  1. SDWebImage清除图片缓存

    背景: 使用 SDWebImage 库,由于内存中一直缓存着加载的图片,而导致内存过高(我们无法手动管理内存),弹出内存警告而导致程序很卡或者直接crash掉. 我的解决方法: 在AppDelegat ...

  2. 谈谈主函数main

    我们来看一下主函数 public class HelloWorld{ public static void main(String[] args){ System.out.println(" ...

  3. Oracle 11g系列:数据库

    1.创建Oracle数据库 创建Oracle数据库的最常用工具为Database Configuration Assistant(数据库配置助手),依次选择[开始]|[所有程序]|[Oracle-Or ...

  4. sys.dm_db_wait_stats

    sys.dm_db_wait_stats 返回在操作期间执行的线程所遇到的所有等待的相关信息. 可以使用此聚合视图来诊断 Azure SQL Database 以及特定查询和批处理的性能问题. 执行查 ...

  5. 如何用Python输出PPT中的文字信息

    在这里,会用到win32com模块 模块下载地址:http://sourceforge.net/projects/pywin32/files/pywin32/ 代码如下: import win32co ...

  6. jQuery.validationEngine.js学习

    项目中使用到了这个插件,抽了个空,看了一下. (function($){ var method ={} $.fn.validationEngine = function(){} $.validatio ...

  7. 写在MongoCola在Github上获得200个Star之后

    MongoCola MongoCola是一个开源的MongoDB管理工具. 由于最初版本的设计失误,所以现在只能在Windows上使用,虽然可以在OSX上使用,但是非常别扭. 契机 MongoCola ...

  8. 【知识积累】JavaMail实现发邮件功能

    一.前言 今天闲来没事,想着通过程序来给别人发邮件.于是,上网搜了一下,相应的资料也很多,刚开始完成了邮件的简单发送,后来想如何能发送附件,继续寻找 答案,但是遇到了一个问题是当我使用txt类型作为附 ...

  9. Cordova webapp实战开发:(7)如何通过简单的方法做到,不重新发布APP来修复bug、增加功能、或者躲开苹果的一些严格审核?

    到<Cordova webapp实战开发:(6)如何写一个iOS下获取APP版本号的插件?>为止,我们已经大体学会了如何使用Cordova了,那些都是使用Cordova的开发者必备的技能. ...

  10. Azure Backup (1) 将SQL Server 2012虚拟机中数据库备份到Azure Storage

    <Windows Azure Platform 系列文章目录> 本文介绍的是由国内世纪互联运维的China Azure,相比国外的Global Azure.主要区别是存储账号的DNS地址不 ...