前言:对于java的基本数据类型及一些系统类(如Date类、集合类),Struts2提供了内置类型转换功能,但是也有一定的限制。所以就演示出自定义类型转换器

一、应用于局部类型转换器

  eg、用户登录出生日期只能用2016-06-09的方式才能转化成功,那么2016/06/09就不能转换成功所以就引出来我们的自定义类型转换器

  1首先我们将做准备工作

    1)login.jsp注册页面  

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6.  
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8. <html>
  9. <head>
  10. <base href="<%=basePath%>">
  11.  
  12. <title>注册</title>
  13.  
  14. </head>
  15.  
  16. <body>
  17. <form action="adduseraction" method="post">
  18. 用户名:<input type="text" name="user.name"/><br/>
  19. 年龄:<input type="text" name="user.age"/><br/>
  20. 出生日期<input type="text" name="user.birthday"/><br/>
  21. <input type="submit" value="提交"/>
  22. </form>
  23. </body>
  24. </html>

  2)将准备成功页面success.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <%@taglib uri="/struts-tags" prefix="s"%>
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8. <html>
  9. <head>
  10. <base href="<%=basePath%>">
  11.  
  12. <title>成功页面</title>
  13.  
  14. </head>
  15.  
  16. <body>
  17. <s:property value="user.birthday"/>
  18. </body>
  19. </html>

  3)将准备实体类User

  1. public class User {
  2. private String name;
  3. private String age;
  4. private Date birthday;
  5. //省略get和set
  6. }

  4)将准备一个Action类

  1. package cn.happy.action;
  2.  
  3. import cn.happy.entity.User;
  4.  
  5. import com.opensymphony.xwork2.ActionSupport;
  6.  
  7. public class AddUserAction extends ActionSupport{
  8. private User user;
  9.  
  10. @Override
  11. public String execute() throws Exception {
  12. System.out.println(user.getBirthday());
  13. return SUCCESS;
  14. }
  15. public User getUser() {
  16. return user;
  17. }
  18. public void setUser(User user) {
  19. this.user = user;
  20. }
  21.  
  22. }

  5)将准备AddUserAction-conversion.properties这个名字前部分AddUserAction要和Action类名相同;由于是局部的所以Action要和AddUserAction-conversion.properties放在同一个目录

6)准备转换器

  1. package cn.happy.converter;
  2.  
  3. import java.text.DateFormat;
  4. import java.text.ParseException;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Map;
  7.  
  8. import org.apache.struts2.util.StrutsTypeConverter;
  9.  
  10. import com.opensymphony.xwork2.conversion.TypeConversionException;
  11.  
  12. public class DateConverter extends StrutsTypeConverter {
  13.  
  14. private final DateFormat[] dfs={
  15. new SimpleDateFormat("yyyy/MM/dd")
  16. };
  17. @Override
  18. public Object convertFromString(Map context, String[] values, Class toType) {
  19. String dateStr=values[];//获取日期的字符串
  20. for (int i = ; i < dfs.length; i++) {
  21. try {
  22. return dfs[i].parseObject(dateStr);
  23. } catch (ParseException e) {
  24.  
  25. continue;
  26. }
  27. }
  28. //如果遍历完毕后仍没有转换成功,表明出现转换异常
  29. throw new TypeConversionException();
  30.  
  31. }
  32.  
  33. @Override
  34. public String convertToString(Map context, Object obj) {
  35.  
  36. return new SimpleDateFormat("yyyy/MM/dd").format(obj);
  37. }
  38.  
  39. }

  7)准备一个adduseraction.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5.  
  6. <struts >
  7. <constant name="struts.devMode" value="true" />
  8.  
  9. <!--创建一个default包,继承自Struts2的struts-default包 -->
  10. <package name="default" namespace="" extends="struts-default">
  11.  
  12. <action name="adduseraction" class="cn.happy.action.AddUserAction" >
  13. <!-- 通过param参数设置保存目录路径 -->
  14.  
  15. <result name="success">/Convert/success.jsp</result>
  16. <result name="input">/Convert/login.jsp</result>
  17. </action>
  18.  
  19. </package>
  20.  
  21. </struts>

  8)在struts.xml引用一个adduseraction.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5.  
  6. <struts >
  7. </package> -->
  8. <include file="adduseraction.xml"></include>
  9. </struts>

二、全局自定义类型转换器

在以上步骤下改

AddUserAction-conversion.properties--->复制到src的目录下----->改名为xwork-conversion.properties--->在文件里

三、我们将在出生日期中如果出错的话我们要给予提示!!!

  1)在全局变量的情况下我们首先要在改变类型转换器添加

  1.   new SimpleDateFormat("yyyy年MM月dd日")
  1. package cn.happy.converter;
  2.  
  3. import java.text.DateFormat;
  4. import java.text.ParseException;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Map;
  7.  
  8. import org.apache.struts2.util.StrutsTypeConverter;
  9.  
  10. import com.opensymphony.xwork2.conversion.TypeConversionException;
  11.  
  12. public class DateConverter extends StrutsTypeConverter {
  13.  
  14. private final DateFormat[] dfs={
  15. new SimpleDateFormat("yyyy/MM/dd"),
  16. new SimpleDateFormat("yyyy年MM月dd日")
  17. };
  18. @Override
  19. public Object convertFromString(Map context, String[] values, Class toType) {
  20. String dateStr=values[];//获取日期的字符串
  21. for (int i = ; i < dfs.length; i++) {
  22. try {
  23. return dfs[i].parseObject(dateStr);
  24. } catch (ParseException e) {
  25.  
  26. continue;
  27. }
  28. }
  29. //如果遍历完毕后仍没有转换成功,表明出现转换异常
  30. throw new TypeConversionException();
  31.  
  32. }
  33.  
  34. @Override
  35. public String convertToString(Map context, Object obj) {
  36.  
  37. return new SimpleDateFormat("yyyy/MM/dd").format(obj);
  38. }
  39.  
  40. }

  如果你页面输入错误会报一个错误就是字段无效。-----》如何给英文字段转换给中文

在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. KnockoutJS 3.X API 第二章 数据监控(1)视图模型与监控

    数据监控 KO的三个内置核心功能: 监控(Observable)和依赖性跟踪(dependency tracking) 声明绑定(Declarative bindings) 模板(Templating ...

  2. 快速入门系列--CLR--02多线程

    最近,由于基础框架的整体升级,因此需要更新所有相关项目的DLL文件.这个过程存在不小的风险,因此也对发布后的生产服务器进行了密切的监控,结果还是出现了个别应用出现异常的情况,很快的占用了大量的服务器内 ...

  3. SQL Server Window Function 窗体函数读书笔记二 - A Detailed Look at Window Functions

    这一章主要是介绍 窗体中的 Aggregate 函数, Rank 函数, Distribution 函数以及 Offset 函数. Window Aggregate 函数 Window Aggrega ...

  4. MemCache分布式缓存的一个bug

    Memcached分布式缓存策略不是由服务器端至支持的,多台服务器之间并不知道彼此的存在.分布式的实现是由客户端代码(Memcached.ClientLibrary)通过缓存key-server映射来 ...

  5. Java多线程系列--“基础篇”08之 join()

    概要 本章,会对Thread中join()方法进行介绍.涉及到的内容包括:1. join()介绍2. join()源码分析(基于JDK1.7.0_40)3. join()示例 转载请注明出处:http ...

  6. 面试题目: PHP 有哪些优缺点?

    当面试官噼里啪啦的问你一大堆问题后,突然问你,PHP有哪些优缺点?你蒙了没? 反正我是蒙了,不管你信不信! 现在,关于PHP优缺点,大致的说几点: 1.  语法简单的,上手很快,而且还有很多很便捷的开 ...

  7. Windows 8(虚拟机环境)安装.NET Framework3.5(includes .NET 2.0 and 3.0)

    按照这篇文章:http://blogs.technet.com/b/aviraj/archive/2012/08/04/windows-8-enable-net-framework-3-5-inclu ...

  8. 可视化工具solo show-----Prefuse自带例子GraphView讲解

    2014.10.15日以来的一个月,挤破了头.跑断了腿.伤透了心.吃够了全国最大餐饮连锁店——沙县小吃.其中酸甜苦辣,绝不是三言两语能够说得清道的明的.校招的兄弟姐妹们,你们懂得…… 体会最深的一句话 ...

  9. 可视化工具solo show-----Processing Prefuse show

    继上篇<可视化工具solo show>罗列出一些主要基于Java开发的软件.插件之后,又仔细揣摩了下哪些可以为我所用. 一番端详之后,准备挑出其中Processing和Prefuse两位大 ...

  10. BonBon - 使用 CSS3 制作甜美的糖果按钮

    BonBon 是一组使用 CSS3 制作的甜美的糖果按钮样式.在过去,我们都是使用图片或者 JavaScript 来实现漂亮的按钮效果,随着越来越多的浏览器对 CSS3 的支持和完善,使用 CSS3 ...