我们在一个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;
}
@Override
public 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 {
@Override
public 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;
}
@Override
public 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,因为我们的页面中包含中文
点击提交按钮后,出现的界面为:
到此为止我们的数据类型转化就成功了