这篇博客,主要介绍一下struts2的类型转换。
首先来解释一下这里的类型转换是指什么。
客户端访问服务器,学过JSP语言的童鞋应该知道,客户端的请求,在服务器端我们用JSP内置对象request的getParameter()方法所获得的请求参数是字符串String类型,而不管该数据原本是Date类型还是int类型,获得的结果都是String类型,在JSP时需要自己去转换,而这些基本类型struts2会自动帮我们转化,只要在action类中定义相应get和set方法即可。但是,如果想在服务器端以类的方式存储数据,比如个人信息存储,这是就要进行数据类型装换了;同样服务器在发送数据到客户端时也需要类型转换,即类型转换是双方向的。
现在,我们用一个例子介绍一下怎么进行类型转换。
1、建立一个commit.jsp页面,代码如下:
<body>
<form action="docommit.action" method="post">
person information:delimitered by '-',username-age-gender<br>
<textarea rows="10" cols="30" name="person">
</textarea>
<br>
<input type="submit" value="submit">
<input type="reset" value="reset">
</form>
</body>
2、建立一个结果页面result.jsp,代码如下:
这里用到了struts标签库。
<%@ taglib uri="/struts-tags" prefix="s" %>
<body>
person information:<br>
<s:property value="person"/><br>
</body>
3、src下建包com.xbb.bean,在包下建立Person类:
package com.xbb.bean;
public class Person {
private String username;
private int age;
private String gender;
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 getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
4、在包com.xbb.action下,建立类DoCommit:
该类继承ActionSupport类,ActionSupport是struts2框架中提供给我们的,里面实现了很多Action类所需要的一些方法,比如execute方法等
package com.xbb.action;
import com.opensymphony.xwork2.ActionSupport;
import com.xbb.bean.Person;
public class DoCommit extends ActionSupport {
private Person person;
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
5、在struts.xml加入action配置:
<action name="docommit" class="com.xbb.action.DoCommit">
<result name="success">/result.jsp</result>
</action>
6、在对应的需要类型转换的action类的同一个包下建立属性文件,这里是在com.xbb.action包下建立,命名规则为“对应action类名-conversion.properties”,此处我们建立文件DoCommit-conversion.properties:
person=com.xbb.converter.PersonConverter
等于号右边表示处理类型转换的类,这个类下面即将建立。等号左边person指定需要类型转换的属性,struts2框架是根据属性文件名DoCommit-conversion.properties中“-”前的类名来判断person是其的属性。下面来建立类型转换处理类com.xbb.converter.PersonConveter。
7、建立包com.xbb.converter,在该包下面建立类PersonConverter:
该类继承了StrutsTypeConverter类,此类两个方法:
convertFromString方法是客户端向服务端数据转换,第二个参数是String[]类型,存储待转换的字符串,这里将其转换成Person类存储在服务器端。
convertToString方法是将服务端数据向客户端转换,其中第二个参数是Object类型,存放的就是待转换的类对象。
package com.xbb.converter;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.xbb.bean.Person;
public class PersonConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
Person person = new Person();
String[] values = arg1[0].split("-");
person.setUsername(values[0]);
person.setAge(Integer.parseInt(values[1]));
person.setGender(values[2]);
return person;
}
@Override
public String convertToString(Map arg0, Object arg1) {
Person person = (Person)arg1;
String back = "username:" + person.getUsername() +
" age:" + person.getAge() +
" gender:" + person.getGender();
return back;
}
}
至此, 一个简单的字符串转类,类转字符串的例子就编写完了,在浏览器中输入 http://localhost:8080/Struts/commit.jsp ,填入数据:
点击submit,得到结果:
证明程序运行无误,数据类型转换正确。