前言:对于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. ::after::before清除浮动原理

    先来看一段代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  2. JS中实现数组和对象的深拷贝和浅拷贝

    数组的拷贝 > 数组的深拷贝,两层 var arr = [[1,2,3],[4,5,6],[7,8,9]]; var arr2 = []; 循环第一层数组 for(var i=0,len=arr ...

  3. Node学习

    参见Node入门 做出node应用的第一个例子 图片上传浏览.

  4. 【目录】C#搭建足球赛事资料库与预测平台与彩票数据分析目录

    本博客所有文章分类的总目录链接:本博客博文总目录-实时更新 1.彩票数据分析与预测 6.智彩足球技术研究团队成员介绍 5.关于组建“智彩足球技术研究团队”的说明 4.为什么选择玩足球彩票以及玩彩票的心 ...

  5. Yii2的深入学习--入口文件

    前一段时间,尝试去写一个 php 的简单框架,发现自己还欠缺很多,就暂时停掉了.准备先读完 Yii2 的源码,然后再去看完 laravel 的源码,最后再继续去写这个简单的 php 框架. 之后关于 ...

  6. Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .编译Hadooop 1.1 搭建环境 1.1.1 安装并设置maven 1. 下载mave ...

  7. 搭建PHP开发环境

    通过两种方式搭建PHP开发环境,而这种开发环境实际是:Apache+MySQL+PHP.  第一种: 通过套件来安装和配置php开发环境. Apache+MySQL+PHP开发环境的搭建(一) 第二种 ...

  8. GIF录制神器GifCam

    前几天偶然看到一款神器:GifCam! GifCam是什么? 一款录制gif动画图片的小软件,小到不足一兆. 使用方法(简单到不可思议) 百度 GifCam 下载: 不用安装,直接打开gifcam: ...

  9. linux下core dump【总结】

    1.前言 一直在从事linux下后台开发,经常与core文件打交道.还记得刚开始从事linux下开发时,程序突然崩溃了,也没有任何日志.我不知所措,同事叫我看看core,我却问什么是core,怎么看. ...

  10. 兼容IE、Firefox的背景半透明内容不透明设置

    首先要说明的是背景是内容的祖先元素.如果是兄弟节点那就没有必要记录这篇文章了. 记录一下,知其然也知其所以然. IE8-特点: 1.不支持"opcity:0.5;"这种写法,只支持 ...