在我看了一些关于Struts 2框架中类型转换的blog或是网站,总感觉阐述的比较笼统,而且没有将理论和实践完整的结合起来。就这一点,我自己将Struts 2中的类型转换这个知识点总结如下,让大家参考。但是这个并不说我写的知识点有多好,这些内容只是发起大家一起来讨论。
[color=red]1、首先将Struts 2框架中类型转换进行一个分类,内容如下:[/color]
(1)用户自定义类型转换方法
(2)使用Struts 2中的内建类型转换方法
[color=red]2、为什么要使用类型转换 [/color]
在开发Web应用的时候,对于B/S服务器表现层主要用于与用户交互,交互的信息或是请求参数通常是通过浏览器发送到服务器端,这些参数不具备丰富的数据类型,但是数据库中的数据往往是由不同的数据类型组成,因此将浏览器数据存入数据库之前,必须在服务器端完成数据类型的转换。
[color=red]3、表现层数据处理需要涉及的技术有哪些[/color]
当知道表现层数据处理分类,才能明确在将B/S架构开发时候,表现层到底是干什么用的,为什么在J2EE结构中提出表现层。下面是表现层数据处理分类
(1)类型转换
(2)数据校验,包括:客户端校验;服务器端校验
[color=red]4、自定义类型转换实现流程,流程如下面的箭头[/color]
[img]/upload/attachment/107287/d8a7ec59-7a20-3bc9-bf69-b4057adeef25.jpg[/img]
[color=red]5、有了上面的内容的介绍,我做了自定义局部类型转换器的测试,其步骤和自定义类型转换器流程图片中的步骤相同。下面按照测试的步骤将源码附上,供大家参考[/color]
[color=red](1)编写一个JavaBean,将请求参数封装成对象。该JavaBean的名称,Person.java[/color]
package com.gxa.edu.struts2.action.ch5;import java.util.Date;public class Person {private String username;private String password;private Date date;public Date getDate() { return date;}public void setDate(Date date) { this.date = date;}public String getPassword() { return password;}public void setPassword(String password) { this.password = password;}public String getUsername() { return username;}public void setUsername(String username) { this.username = username;}}
[color=red](2)编写一个Action类,来处理URL请求。该Action类的名称,TypeConversionAction.java[/color]
package com.gxa.edu.struts2.action.ch5;import java.util.Date;public class TypeConversionAction {private String username;private String password;private Date date;public Date getDate() { return date;}public void setDate(Date date) { this.date = date;}public String getPassword() { return password;}public void setPassword(String password) { this.password = password;}public String getUsername() { return username;}public void setUsername(String username) { this.username = username;}public String execute() { System.out.println("/*===进入TypeConversionAction===*/"); System.out.println("date===" + date); return "success";}}
[color=red](3)自定义类型转换器。该类型转换器名称,TypeConverter.java[/color]
package com.gxa.edu.struts2.action.ch5;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;public class TypeConverter extends StrutsTypeConverter{private static SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD");@Overridepublic Object convertFromString(Map arg0, String[] arg1, Class arg2) { // TODO Auto-generated method stub System.out.println("类型转换===" + arg1[0]); Date date = null; try { if (arg1 != null && arg1.length > 1) { String tmp = arg1[0]; date = sdf.parse(tmp); } } catch (ParseException e) { System.out.println("时间类型转换解析错误"); } return date;}@Overridepublic String convertToString(Map arg0, Object arg1) { // TODO Auto-generated method stub return sdf.format(arg1);}}
[color=red](4)编写配置文件。配置文件包含两个:struts-ch5.xml和Person-conversion.properties[/color]
struts-ch5.xml配置文件代码如下:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><!-- Struts2 常量配置 --><constant name="struts.custom.i18n.resources" value="messageResource"></constant><package name="ch5" extends="struts-default" namespace="/ch5"> <action name="typeConversion" class = "com.gxa.edu.struts2.action.ch5.TypeConversionAction"> <result>/ch5/welcome.jsp</result> </action></package></struts>Person-conversion.properties配置文件代码如下:date=com.gxa.edu.struts2.action.ch5.TypeConverter
[color=red](5)运行tomcat,并测试。测试结果分为两个:一个是Eclipse中console信息;一个是welcome.jsp页面显示信息[/color]
[img]/upload/attachment/107297/3233df78-3039-3921-9862-78ec652a55a3.jpg[/img]
[img]/upload/attachment/107299/b1f914f7-3e90-36ee-9553-d2cc6b2ad547.jpg[/img]