struts2学习笔记之二、struts2类型转换器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jQuerys/article/details/52356419

1、strtus2的类型转换器分为两种,一种为局部类型转换器,配置文件必与Action在同一个目录下,且格式为:Action名称-conversion.properties;另一种为全局类型转换器,配置文件放在src目录下,文件名称固定为: xwork-conversion.properties


2、编写自己的一个类型转换器的demo


3、我们继续用,我们在笔记一中的工程struts2_first,以后,我们的每的笔记中,都会用到这个工程。

第一步, 在工程下,分别建立com.kingkong.struts2.bean  包和com.kingkong.struts2.converter包,分别存放javabean对象,和类型转换器类


4、在bean 包下建立,javabean类,User类,代码如下:

package com.kingkong.struts2.bean;


import java.util.Date;


public class User {
private  long id;
private String username;
private int age;
private String addr;
private Date birthday;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
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 getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", age=" + age + ", addr=" + addr + ", birthday="
+ birthday + "]";
}


}



5、在action包下建立UserAction类,,属性为User,并设置get 和set方法,,代码如下:

package com.kingkong.struts2.action;


import com.kingkong.struts2.bean.User;
import com.opensymphony.xwork2.ActionSupport;


public class UserAction extends ActionSupport {


/**

*/
private static final long serialVersionUID = 1L;

private User user;



public User getUser() {
return user;
}






public void setUser(User user) {
this.user = user;
}






@Override
public String execute() throws Exception {
return super.execute();
}


}


6、在jsp目录下,建userLogin.jsp界面,action请求的是,UserAction,为了方便类型转换类中取数,我们将input的name属性统一取名为,UserAction中的name="user",代码如下,

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="userAction" method="post">
用户名:<input type="text" name="user"/><br/>
年龄:<input type="text" name="user"/><br/>
地址<input type="text" name="user"/><br/>
生日<input type="text" name="user"/><br/>
<input type="submit" name="submit" value="submit"/>
</form>
</body>
</html>


7、配置好strtus.xml,在package包是新加入action节点,配置如下:

<action name="userAction" class="com.kingkong.struts2.action.UserAction" >
<result name="success">/jsp/user_success.jsp</result>
</action>


8、建立,访问成功后的action,jsp页面:user_success.jsp,调用action中的user属性,会调用User对象的toString方法,这是java基本,相必大学都懂的,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="../js/jquery-1.12.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<s:property value="user"/>
</body>
</html>

  

9、

6、因为UserAction中,属性为User对象,不属性基本 数据类型,struts2无法进行默认的类型转换,所以要我们自己编写对应的类型转换,来进行类型转换,

在com.kingkong.struts2.converter包下建立,类型转换类,名称可以随便,我们取名称UserConverter,并继承org.apache.struts2.util.StrutsTypeConverter,类,重写其中的两个方法,代码如下:

重写的第一个方法:convertFromString,,此方法处理是的,客户端请求过的的数据,转换成对应的User对象的处理过程

第二方法处理的,给客户端响应的转换数据,,代码如下:


package com.kingkong.struts2.converter;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;


import org.apache.struts2.util.StrutsTypeConverter;


import com.kingkong.struts2.bean.User;


public class UserConverter extends StrutsTypeConverter {


@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
if(User.class.equals(arg2)){
//对应userLogin.jsp中的请求参数
String username = arg1[0];
int age = Integer.valueOf(arg1[1]);
String addr = arg1[2];
SimpleDateFormat sdf =   new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
User user = new User();
try {
Date birthday = sdf.parse(arg1[3]);
user.setBirthday(birthday);
} catch (ParseException e) {
e.printStackTrace();
}
user.setUsername(username);
user.setAddr(addr);
user.setAge(age);
return user;
}
return null;
}


@Override
public String convertToString(Map context, Object o) {
if(o instanceof User){
User user = (User)o;
return user.toString();
}
return null;
}


}


10、局部类型转换器,在Action目录下,建配置文件,名称为:UserAction-conversion.properties,,在配置文件中明确,UserAction中的user属性,由哪个类型转换器类,来转换(类开全路径)即可,配置如下:

user=com.kingkong.struts2.converter.UserConverter

11、到此,一个局部类型转换器的demo,的整个流程已经完成,启动tomcat,,访问userLogin.jsp,,转入数据,看是否访问成功即可,

http://127.0.0.1:8080/struts2_first/jsp/userLogin.jsp




点提交后,访问成功,说明,我们的类型转换器已经,转换成功了,可以用debug模式启动eclipse,在UserConverter类中,打一个断点,试一下,




12、全局的类型转换器,其他的流程都一样,只不过properties配置文件不是放到与Action同目录下,而是放到src目录下,而且配置文件名称固定为:

xwork-conversion.properties,配置的内容也不同,key为待转换的对象类名(包的全路径),value为类型转换器类名称(包的全路径),可以自己去试一下吧


如下这样:

com.kingkong.struts2.bean.User=com.kingkong.struts2.converter.UserConverter

猜你喜欢

转载自blog.csdn.net/jQuerys/article/details/52356419