Struts2类型转换     

struts2中内置了大量的类型转换器用来完成数据类型转换的问题,这篇随笔主要通过两个方面来写Struts类型转换

1:Struts2内置的类型转换器

2:如何自定义类型转换器

那么首先我们来学习有关Struts2内置的类型

1:Struts2内置的类型转换器

Struts2的内置类型转换器,可以为你处理大多数的类型转换,这包括了以下类型和String类型之间的转换!

1.String

将int,double,boolean,String类型的数组或java.util.Date类型转换成字符串。

2:boolean和Boolean

在字符串与boolean之间转换

3:char/Character

在字符串和字符之间转换

4:int/Integer,float/Float,long/Long,double/Double

在字符串与数值类型之间进行转换

5:date

在字符串和日期类型之间进行转换,默认格式是:YYYY-MM-DD

6:数组

由于数组本身就有类型,可以将多个同名参数,转换到数组中(在之前总结的兴趣爱好多选择,如果你选择多个,同时他们name属性相同就自动变为数组)

7:集合

支持将数据保存到 List 或者 Map 集合

关于内置类型转换器举例:

Action类

 import java.util.Date;
import com.opensymphony.xwork2.ActionSupport; public class CustomerAction extends ActionSupport { private String username; private int age; private Date birthday; @Override
public String execute() throws Exception {
System.out.println("客户姓名是:" + username + ",年龄是:" + age + ",生日:" + birthday); return NONE;
}
public void setUsername(String username) {
this.username = username;
}
public void setAge(int age) {
this.age = age;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
/*控制台输出结果:客户姓名是:zhangsan,年龄是:12,生日:Tue Jul 09 00:00:00 CST 1996
*/

jsp界面

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<form action="${pageContext.request.contextPath }/customer.action">
客户姓名:<input type="text" name="username"><br/>
年龄:<input type="text" name="age"><br/>
生日:<input type="text" name="birthday"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>

界面输入:这里年龄只能输入合法年龄,日期的默认格式:yyyy-MM-dd,如果你输入不合规则网页会报错,比如你输入1996/7/9页面就会报错

 2:如何自定义类型转换器

       为什么需要自定义类型转换器,这个问题相信大家都知道,就像我上面所说的,日期的默认格式是yyyy-MM-dd,那如果你想输入yyyy/mm/dd或者其它的

这个时候就需要你修改你自己的类型转换器,否则会报错。下面我写一个有关自定义类型转换器的方法: 继承StrutsTypeConverter

DateConverter 
 import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map; import javax.xml.bind.TypeConstraintException;
import org.apache.struts2.util.StrutsTypeConverter; public class DateConverter extends StrutsTypeConverter {
//为方便支持多种日期格式的转换,可增加时间格式
private final DateFormat [] dateformats={
new SimpleDateFormat("yyyy-MM-dd"),
new SimpleDateFormat("yyyy年MM月dd日"),
new SimpleDateFormat("yyyy.MM.dd"),
new SimpleDateFormat("yyyy/MM/dd")
};
/* 将一个或多个字符串值转换为指定的类型
*
*/
@Override
public Object convertFromString(Map arg0, String[] values, Class toType) {
//从表单获取的日期字符串
String dateStr = values[0];//思考:这里为什么是数组而不是字符串?我自己也没有搞明白,希望大神看到后宰评论区给予解答,谢谢
for(int i = 0;i<dateformats.length;i++){//遍历日期类型进行转换 try { //SimpleDateFormat类中parse()方法用于将输入的特定字符串转换成Date类的对象
return dateformats[i].parse(dateStr);
} catch (Exception e) {
continue; //很关键
}
}
throw new TypeConstraintException("遍历结束仍没有指定的类型转换");
} /* 将指定对象转化为字符串
* method:这个方法是用来回显用的,就是你需要回显成什么样的格式就可以设置什么样的格式
*/
@Override
public String convertToString(Map context, Object object) {
Date date = (Date) object;
//指定输出的格式
return new SimpleDateFormat("yyyy年MM月dd日").format(date);
}
}
/*主要讲这里的continue,就是如果你是输入的是1992-2-2,那么dateformats[0]和你直接匹配
* 那么直接返回,当如果你开始输入的是1992/2/2那么就和dateformats[0]不匹配,那么出现异常执行
* catch中的内容,而catch中是continue代表终止本次循环进入下一次循环,那么有和dateformats[1]
* 进行匹配,如果都不匹配才会异常,所以这里用的太关键了
*

Aation(类)

 import java.util.Date;
import com.opensymphony.xwork2.ActionSupport; public class RegisterAction1 extends ActionSupport {
private Date brithday1;
private Date brithday2;
private Date brithday3;
private Date brithday4;
/*
* 为上面四个提供set和get方法
*/ @Override
public String execute() throws Exception {
//获取表单的数据
System.out.println("生日1"+brithday1);
System.out.println("生日2"+brithday2);
System.out.println("生日3"+brithday3);
System.out.println("生日4"+brithday4);
return SUCCESS;
}
}
/*后台输出结果:
* 生日1Sun Feb 02 00:00:00 CST 1992
* 生日2Sun Feb 02 00:00:00 CST 1992
* 生日3Sun Feb 02 00:00:00 CST 1992
* 生日4Sun Feb 02 00:00:00 CST 1992
*/

register.jsp(登录界面)

 <html>
<head>
<title>注册</title>
</head>
<body>
<!-- 这里有四个生日 -->
<form action="${pageContext.request.contextPath }/register1.action" method="post">
生日1:<input type="text" name="brithday1"><br/><br/>
生日2:<input type="text" name="brithday2"><br/><br/>
生日3:<input type="text" name="brithday3"><br/><br/>
生日4:<input type="text" name="brithday4"><br/><br/>
<input type="submit" value="注册">
</form>
</body>
</html>

struts.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"></constant> <package name="default" extends="struts-default">
<action name="register1" class="com.guigu.struts2.action.RegisterAction1">
<result>/result.jsp</result>
</action>
</package>
</struts>
result.jsp
 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
</head>
<body>
<!-- 回显的时候发现尽管前面输入格式不一样,但输出格式是一样的 -->
生日1:<s:property value="brithday1"/><br/>
生日2:<s:property value="brithday2"/><br/>
生日3:<s:property value="brithday3"/><br/>
生日4:<s:property value="brithday4"/><br/>
</body>
</html>
界面:

最终返回界面:

注意:这中间还有很重要的东西需要配置:配置转换器

4、配置转换器
     Struts2提供了两种方式配置转换器
方式一:应用于全局范围的类型转换器,在src目录下创建xwork-conversion.properties
     转换类全名=类型转换器类全名
    java.util.Date=com.sytudy.struts2.action.DateConverter  (前面是你需要转换的类型,后面是类型转换器类
方式二:应用于特定类的类型转换器,在特定类的相同目录下创建一个名为ClassName-conversion.properties的属性文件
     特定Action类的属性名=类型转换器类全名  

这篇文字就讲到这里,如果哪里有不足,欢迎大家指点,谢谢

Struts2系列笔记(7)---Struts2类型转换的更多相关文章

  1. struts2系列(二):struts2参数传递错误、struts2的输入错误验证

    一.struts2参数传递错误 1. 基本数据类型的传递最好使用包装类,原因是struts 2.1之后使用基本数据类型如果参数为空会报错2. 日期参数的传递最好定义一个区域的属性(定义locale), ...

  2. [Struts2学习笔记] -- 简单的类型转换

    接下来学习一下Struts2简单的类型转换,Struts2基于ognl.jar实现了简单类型的数据转换.比如jsp页面中的form值与字段值的转换,下面写一个例子. 1.创建一个jsp页面,编写一个f ...

  3. struts2系列笔记(1)

    struts2框架 如果你之前在MVC模式的时候一直都是通过servlet,获取和返回数据,那么现在开始学习struts2框架, Struts是一个实现MVC设计模式的优秀的框架.它的许多优点我就不说 ...

  4. Struts2系列笔记(2)---Struts.XML

    Struts2.xml 本篇博客主要讲Struts2.xml中package下的标签和标签属性,主要分以下四个部分说明: (1)action的配置基本属性 (2)同一个Action类中不同方法满足不同 ...

  5. Struts2系列笔记(4)---Ation类访问servlet

    Ation类访问servlet Ation类有三种方式servlet: (1)间接的方式访问Servlet API  ---使用ActionContext对象 (2)  实现接口,访问Action时完 ...

  6. struts2学习笔记--使用struts2插件实现ajax处理(返回json数据)

    贴一个简单的例子,通过jquery的post调用action,定义一个对象User,有name和age属性,实例化几个对象,以json的格式返回到jsp,在前台页面显示出来,模拟用户列表. 导入相关j ...

  7. struts2学习笔记之六:struts2的Action访问ServletAPI的几种方式

    方法一:通过ActionContext访问SerlvetAPI,这种方式没有侵入性 Action类部分代码 import com.opensymphony.xwork2.ActionContext; ...

  8. Struts2学习笔记(一):Struts2开发环境的配置

    一.Struts2应用所需的jar文件. 开发struts2应用需要依赖的jar文件在解压目录下的lib文件夹里面.开发struts2程序最少需要的jar文件为:struts2-core-2.xx.j ...

  9. struts2系列(四):struts2国际化的多种方式

    一.struts2国际化原理 根据不同的Locale读取不同的文本. 例如有两个资源文件: 第一个:message_zh_CN.properties 第二个:message_en_US.propert ...

随机推荐

  1. STM32硬件IIC操作

    Stm32具有IIC接口,接口有以下主要特性 多主机功能:该模块既可做主设备也可做从设备 主设备功能 C地址检测 位/10位地址和广播呼叫 支持不同的通讯速度 状态标志: 发送器/接收器模式标志 字节 ...

  2. 关于Java在Linux or Android平台调用.so库

    Linux平台Java调用so库-JNI使用例子 android NDK开发及调用标准linux动态库.so文件 在Android项目中调用已有.so库 Android 调用.so文件 jni And ...

  3. iOS越狱包

    编译完了的程序是xxx.app文件夹,我们需要制作成ipa安装包,方便安装 找一个不大于500*500的png图片(程序icon图标即可),改名为:iTunesArtwork,注意不能有后缀名. 建立 ...

  4. jQuery-ui datepicker的使用演示代码

    这两天使用jquery做一个web端展示的工具,遇到了不少问题也学到了不少知识.其中有一个就是在页面中显示日期选择器的功能,通过百度直接使用的是jquery datepicker 看到一篇使用说明很不 ...

  5. CocoaPods安装和使用教程 分类: ios技术 ios相关 2015-03-11 21:53 48人阅读 评论(0) 收藏

    目录 CocoaPods是什么? 如何下载和安装CocoaPods? 如何使用CocoaPods? 场景1:利用CocoaPods,在项目中导入AFNetworking类库 场景2:如何正确编译运行一 ...

  6. A股暴跌三日市值蒸发4.2万亿 股民人均浮亏超2万

    A股暴跌三日市值蒸发4.2万亿 股民人均浮亏超2万 http://finance.qq.com/a/20150508/010324.htm?pgv_ref=aio2015&ptlang=205 ...

  7. handler的使用

    2014-04-15 10:45:06 简单学习了handler的使用. 昨天下载的问题,在手机上正常,在平板上不正常. 怀疑是网络的问题. 一直获得的流为空 2014-04-15 18:10:59 ...

  8. UVa 10718 - Bit Mask

    题目大意:给一数N,在区间[L, U]上找到一个数M使得M| N的值最大,如果有M有多个可能值,取最小的那个值. 从最高位开始逐位判断,如果N的该位为0,为使M | N的值最大,M的该位应考虑置为1, ...

  9. jmeter接口测试实践

    一.什么是接口测试? 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻 ...

  10. iOS 之 socket 与 http

    http连接:短连接,发送一次请求,服务器响应后连接就断开. socket连接:长连接,连接后长期保持连接状态.