类型转换器是双向的,一方面客户端所传递给服务器端的数据需要转换为指定的类型,另一方面服务器端在进行数据回写时需要将已经转换
的数据类型转换为刚提交过来时的数据类型(一般为String),将之添加到响应对象当中去返回到客户端当中去。
建立一个类型转换器对象,然后对该类型转换器对象进行注册操作.当前的DateConverter对象为一个局部类型转换器对象,该局
部类型转换器对象因为是要对loginAction对象当中的birthday属性值进行转换操作,所以在注册时所进行的设置也是针对于birthday
来进行的。
在loginAction-conversion.propertites文件当中注册信息
birthday=com.converter.DateConverter
的数据类型转换为刚提交过来时的数据类型(一般为String),将之添加到响应对象当中去返回到客户端当中去。
建立一个类型转换器对象,然后对该类型转换器对象进行注册操作.当前的DateConverter对象为一个局部类型转换器对象,该局
部类型转换器对象因为是要对loginAction对象当中的birthday属性值进行转换操作,所以在注册时所进行的设置也是针对于birthday
来进行的。
在loginAction-conversion.propertites文件当中注册信息
birthday=com.converter.DateConverter
loginAction为要使用当前转换器的类,后面的名字为固定不变的
建立一个登陆界面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登录界面</title> </head> <body> <form action="login" method="post"> <table> <caption>表单登录</caption> <tr> <td>年龄:<input type="text" name="age"></td> </tr> <tr> <td>生日:<input type="text" name="birthday"></td> </tr> <tr> <td><input type="submit" value="提交"></td> </tr> </table> </form> </body> </html>建立表单对象进行数据提交后的action类对象:
public class loginAction { private Date birthday; private int age; /** * @return the birthday */ public Date getBirthday() { return birthday; } /** * @param birthday the birthday to set */ public void setBirthday(Date birthday) { this.birthday = birthday; } /** * @return the age */ public int getAge() { return age; } /** * @param age the age to set */ public void setAge(int age) { this.age = age; } public String execute() { System.out.println("执行execute方法"); return "success"; } }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> <package name="default-package" namespace="/" extends="struts-default"> <action name="login" class="com.action.loginAction"> <result name="success">/success.jsp</result> </action> </package> </struts>
建立一个类型转换器对象:该类型转换器对象用于将来自客户端的字符串日期格式转换为Date类型的日期格式
package com.converter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; import freemarker.template.SimpleDate; public class DateConverter extends DefaultTypeConverter{ //当前的类型转换器要想进行使用必须要进行注册操作 /* (non-Javadoc) * @see com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter#convertValue(java.lang.Object, java.lang.Class) */ @Override public Object convertValue(Object value, Class toType) { // value为从客户端页面当中所传递过来的参数值,value所接收的一般是一个参数数组,toType为将要转换为的类型 System.out.println("进行日期的转换操作"); try {//当日期类型转换异常时将会进行异常的抛出操作 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); if(toType==Date.class) {//表明要将所传递过来的参数值转换为日期类型数据 String dateStr=((String[])value)[0];//将所传递过来的参数数组对象强制转换为一个String类型的数据 return sdf.parse(dateStr);//对指定的字符串数据进行转换操作 } else if(toType==String.class) {//表明要转换为String类型时时服务器端要向客户端进行数据的转换操作 Date date=(Date)value;//当前value值参数为date类型 return sdf.format(date);//将日期类型转换为指定模板的类型 } } catch (ParseException e) { System.out.println("日期类型的格式转换错误"); e.printStackTrace(); } return super.convertValue(value, toType); } }对所建立的日期转换器对象进行注册操作(在与action对象同一目录之下建立一个loginAction-conversion.properties文件夹在里面添加注册信息):
birthday=com.converter.DateConverter对action对象当中的birthday属性值进行类型转换器对象的注册操作,当服务器对象接收到来自于客户端的请求数据之后会将所接收到的参数值传递给类型转换器对象当中的默认方法进行类型的转换操作,然后将转换成功之后的数据类型赋值给当前action类对象当中所指定的属性。
登录成功界面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <s:debug/> <h2 style="color: red;">登录成功</h2> 对值栈对象当中的birthday数据进行输出操作:<br> <s:property value="birthday"/> <br> 采用日期标签来进行输出操作:(并设定输出的日期格式):<br> <s:date name="birthday" format="yyyy年MM月dd日"/> </body> </html>程序的实际的运行效果:
登录成功界面:
值栈对象当中的数据信息:
从值栈对象当中可以看出表单对象当中所提交的字符串类型的日期被转换为了Date类型。