Struts2基础学习之数据类型转换

来源:互联网 发布:js计算总金额 编辑:程序博客网 时间:2024/06/05 08:46

我们在一个JSP表单中提交数据时,Struts2框架会将请求转发给Action处理,请求中经常会携带一些参数,Action中定义了表单中的一些字段,如果是基本的数据类型,或者是Java内置的一些数据类型,如int,String,Date等类型,Action会自动将请求中携带的字符串类型的参数转化成对应的int,String,Date等类型,但是,如果我们提交的表单数据中携带了自定义的数据类型,这时就得处理数据类型的转换了,本文通过一个例子,记录我学习Struts2框架中的数据类型转换 。

还是一步一步细说,从最开始的新建工程开,到最后的完成数据类型的转换并输出结果,我分步骤记录下来:

一、新建Java web工程,我们起名为TestConvert,在lib文件夹下导入Struts2依赖的jar包

二、编写user_convert.jsp页面,在该页面中我们会输入数据,提交给Action处理,这里用到了taglib标签库,所以我们需要引用一下:

<%@ taglib uri="/struts-tags" prefix="s"%>
然后是body部分的代码:

<body><s:form action="userAction"><s:textfield name="user" label="输入用户姓名,年龄,性别,用逗号隔开"></s:textfield><s:submit value="提交"></s:submit></s:form></body>
上面我们用taglib标签库定义了一个表单,里面包含一个输入框和提交按钮,输入框里输入用户名、年龄、性别,用中文的逗号隔开,然后提交给userAction处理

三、新建User Java bean,代码如下:

package com.example.bean;public class User {private String username;private int age;private String sex;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "User [username=" + username + ", age=" + age + ", sex=" + sex+ "]";}}
上面的Java bean里,定义了用户名、年龄、性别三个字段,然后复写了toString()方法

四、编写处理请求的Action类,这里我们取名为UserAction并且继承了ActionSupport,代码如下:

package com.example.action;import com.example.bean.User;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public String execute() throws Exception {return SUCCESS;}}
五、编辑struts.xml文件

编辑好的struts.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><package name="test" extends="struts-default"><action name="userAction" class="com.example.action.UserAction"><result name="success">/success.jsp</result></action></package></struts>
该文件里定义了userAction的处理类为com.example.action.UserAction,并且请求成功后跳转到success.jsp页面

六、编写success.jsp页面

这个页面里的内容很简单,还是用了taglib标签库,然后输出User的信息

<body>   Person Info : ${requestScope.user}</body>
上面的步骤里省略了web.xml文件的编写,在新建工程的时候,我们需要在web.xml文件里定义过滤器,用于过滤请求,web.xml文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name></display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
下面是最关键的步骤了,即处理数据类型的转化,由于在user_convert.jsp页面中我们输入的用户信息是字符串类型,且用中文的逗号隔开的,所以提交到Action处理时,Action并不能自动将我们输入的信息转化为User类型,我们需要自己编写数据转换类

七、编写数据转换类UserConversion,该类继承自StrutsTypeConverter,代码如下:

package com.example.convertion;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;import com.example.bean.User;public class UserConversion extends StrutsTypeConverter {@Overridepublic Object convertFromString(Map arg0, String[] arg1, Class arg2) {String userInfo = arg1[0];System.out.println("user info : " + userInfo);String[] arr = userInfo.split(",");User user = new User();user.setUsername(arr[0]);user.setAge(Integer.parseInt(arr[1]));user.setSex(arr[2]);return user;}@Overridepublic String convertToString(Map arg0, Object arg1) {User user = (User) arg1;return user.toString();}}
可以看到,上面的类中包含两个方法,一个是从字符串转换,一个是转换成字符串,方法名已经很直观了,写好数据转换类后,我们还需要编写properties文件,通过该文件告诉Struts2框架,对于User类的转换,需要用哪个转换器

八、编写properties文件

这里的properties文件的命名是有规定的,对于全局的数据转换类,属性文件的命名为:xwork-conversion.properties,我们创建该文件并加入如下内容:

com.example.bean.User=com.example.convertion.UserConversion
到这里基本上所有的工作都完成了,我们看看项目的结构图:



将项目部署到web服务器上,然后开始测试,我们在浏览器里输入http://localhost:8080/TestConvert/user_convert.jsp,在出现的页面里输入如下数据,注意用中文的逗号隔开,这里需要注意,在编写JSP文件时,需要改一下文件编码为UTF-8,因为我们的页面中包含中文


点击提交按钮后,出现的界面为:


到此为止我们的数据类型转化就成功了










0 0