004-struts2类型转换一

来源:互联网 发布:ubuntu空闲分区不可用 编辑:程序博客网 时间:2024/06/06 11:49

这篇博客,主要介绍一下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;}@Overridepublic 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 {@Overridepublic 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;}@Overridepublic 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,得到结果:

证明程序运行无误,数据类型转换正确。大笑







0 0
原创粉丝点击