Struts2系列笔记(7)---Struts2类型转换
来源:互联网 发布:视频机器码破解软件 编辑:程序博客网 时间:2024/04/30 22:47
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类
1 import java.util.Date; 2 import com.opensymphony.xwork2.ActionSupport; 3 4 public class CustomerAction extends ActionSupport { 5 6 private String username; 7 8 private int age; 9 10 private Date birthday;11 12 @Override13 public String execute() throws Exception {14 System.out.println("客户姓名是:" + username + ",年龄是:" + age + ",生日:" + birthday);15 16 return NONE;17 }18 public void setUsername(String username) {19 this.username = username;20 }21 public void setAge(int age) {22 this.age = age;23 }24 public void setBirthday(Date birthday) {25 this.birthday = birthday;26 }27 }28 /*控制台输出结果:客户姓名是:zhangsan,年龄是:12,生日:Tue Jul 09 00:00:00 CST 199629 */
jsp界面
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <html> 3 <head> 4 </head> 5 <body> 6 <form action="${pageContext.request.contextPath }/customer.action"> 7 客户姓名:<input type="text" name="username"><br/> 8 年龄:<input type="text" name="age"><br/> 9 生日:<input type="text" name="birthday"><br/>10 <input type="submit" value="提交"> 11 </form> 12 </body>13 </html>
界面输入:这里年龄只能输入合法年龄,日期的默认格式:yyyy-MM-dd,如果你输入不合规则网页会报错,比如你输入1996/7/9页面就会报错
2:如何自定义类型转换器
为什么需要自定义类型转换器,这个问题相信大家都知道,就像我上面所说的,日期的默认格式是yyyy-MM-dd,那如果你想输入yyyy/mm/dd或者其它的
这个时候就需要你修改你自己的类型转换器,否则会报错。下面我写一个有关自定义类型转换器的方法: 继承StrutsTypeConverter
DateConverter
1 import java.text.DateFormat; 2 import java.text.ParseException; 3 import java.text.SimpleDateFormat; 4 import java.util.Date; 5 import java.util.Map; 6 7 import javax.xml.bind.TypeConstraintException; 8 import org.apache.struts2.util.StrutsTypeConverter; 9 10 public class DateConverter extends StrutsTypeConverter {11 //为方便支持多种日期格式的转换,可增加时间格式12 private final DateFormat [] dateformats={13 new SimpleDateFormat("yyyy-MM-dd"),14 new SimpleDateFormat("yyyy年MM月dd日"),15 new SimpleDateFormat("yyyy.MM.dd"),16 new SimpleDateFormat("yyyy/MM/dd")17 };18 /* 将一个或多个字符串值转换为指定的类型19 * 20 */21 @Override22 public Object convertFromString(Map arg0, String[] values, Class toType) {23 //从表单获取的日期字符串24 String dateStr = values[0];//思考:这里为什么是数组而不是字符串?我自己也没有搞明白,希望大神看到后宰评论区给予解答,谢谢25 for(int i = 0;i<dateformats.length;i++){//遍历日期类型进行转换26 27 try { //SimpleDateFormat类中parse()方法用于将输入的特定字符串转换成Date类的对象28 return dateformats[i].parse(dateStr);29 } catch (Exception e) {30 continue; //很关键31 }32 }33 throw new TypeConstraintException("遍历结束仍没有指定的类型转换");34 }35 36 /* 将指定对象转化为字符串37 * method:这个方法是用来回显用的,就是你需要回显成什么样的格式就可以设置什么样的格式38 */39 @Override40 public String convertToString(Map context, Object object) {41 Date date = (Date) object;42 //指定输出的格式43 return new SimpleDateFormat("yyyy年MM月dd日").format(date);44 }45 }46 /*主要讲这里的continue,就是如果你是输入的是1992-2-2,那么dateformats[0]和你直接匹配47 * 那么直接返回,当如果你开始输入的是1992/2/2那么就和dateformats[0]不匹配,那么出现异常执行48 * catch中的内容,而catch中是continue代表终止本次循环进入下一次循环,那么有和dateformats[1]49 * 进行匹配,如果都不匹配才会异常,所以这里用的太关键了50 *
Aation(类)
1 import java.util.Date; 2 import com.opensymphony.xwork2.ActionSupport; 3 4 public class RegisterAction1 extends ActionSupport { 5 private Date brithday1; 6 private Date brithday2; 7 private Date brithday3; 8 private Date brithday4; 9 /*10 * 为上面四个提供set和get方法11 */12 13 @Override14 public String execute() throws Exception {15 //获取表单的数据16 System.out.println("生日1"+brithday1);17 System.out.println("生日2"+brithday2);18 System.out.println("生日3"+brithday3);19 System.out.println("生日4"+brithday4); 20 return SUCCESS;21 }22 } 23 /*后台输出结果:24 * 生日1Sun Feb 02 00:00:00 CST 199225 * 生日2Sun Feb 02 00:00:00 CST 199226 * 生日3Sun Feb 02 00:00:00 CST 199227 * 生日4Sun Feb 02 00:00:00 CST 1992 28 */
register.jsp(登录界面)
1 <html> 2 <head> 3 <title>注册</title> 4 </head> 5 <body> 6 <!-- 这里有四个生日 --> 7 <form action="${pageContext.request.contextPath }/register1.action" method="post"> 8 生日1:<input type="text" name="brithday1"><br/><br/> 9 生日2:<input type="text" name="brithday2"><br/><br/>10 生日3:<input type="text" name="brithday3"><br/><br/>11 生日4:<input type="text" name="brithday4"><br/><br/>12 <input type="submit" value="注册">13 </form>14 </body>15 </html>
struts.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 <struts> 6 <!-- 开发者模式 --> 7 <constant name="struts.devMode" value="true"></constant> 8 9 <package name="default" extends="struts-default"> 10 <action name="register1" class="com.guigu.struts2.action.RegisterAction1">11 <result>/result.jsp</result>12 </action>13 </package>14 </struts>
result.jsp
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-tags" prefix="s"%> 3 <html> 4 <head> 5 </head> 6 <body> 7 <!-- 回显的时候发现尽管前面输入格式不一样,但输出格式是一样的 --> 8 生日1:<s:property value="brithday1"/><br/> 9 生日2:<s:property value="brithday2"/><br/>10 生日3:<s:property value="brithday3"/><br/>11 生日4:<s:property value="brithday4"/><br/> 12 </body>13 </html>
界面:
最终返回界面:
注意:这中间还有很重要的东西需要配置:配置转换器
这篇文字就讲到这里,如果哪里有不足,欢迎大家指点,谢谢
- Struts2系列笔记(7)---Struts2类型转换
- Struts2系列笔记(7)---Struts2类型转换
- Struts2系列笔记(7)---Struts2类型转换
- Struts2系列笔记(7)---Struts2类型转换
- Struts2系列笔记(7)---Struts2类型转换
- struts2系列学习笔记(8)---------------类型转换
- [struts2]类型转换笔记
- Struts2类型转换 笔记
- struts2系列学习笔记(8)---------------类型转换的错误处理
- 类型转换---struts2学习笔记
- Struts2类型转换学习笔记
- Struts2学习笔记-类型转换
- Struts2 系列之(3)类型转换
- 【Struts2】:Struts2的类型转换
- Struts2学习笔记4:Struts2的类型转换【2】
- Struts2学习笔记5:Struts2类型转换续二
- Struts2.1笔记(五):Struts2的类型转换
- struts2 自学笔记(3)之类型转换
- BIO,NIO和AIO的区别
- [java入门]--java第一个程序Hello World(超详细步骤)
- 292. Nim Game
- 复制带随机指针的链表
- 350. Intersection of Two Arrays II
- Struts2系列笔记(7)---Struts2类型转换
- C++ bitset类的使用与简介
- Pd10安装 Ubuntu14.04
- java.util.concurrent介绍
- WebLogic
- 基于S5PV210板驱动开发之按键驱动
- CPU、内存、硬盘、指令以及他们之间的关系
- windows redis设置日志路径,设置密码,Java使用密码连接redis
- WebLogic安装介绍