码迷,mamicode.com
首页 > 其他好文 > 详细

struts2进阶【2】——类型转换

时间:2015-02-28 13:08:15      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

        我们知道通过HTTP提交到后台的数据,都是字符串的形式,而我们需要的数据类型当然不只字符串类型一种。所以,我们需要类型转换!
        在Struts2中,类型转换的概念除了用于将界面传递过来的字符串转换为特定的类型(convertFromString)之外,还可以用于将特定的类型转换为字符串(即当我们在JSP中要把某种类型的对象呈现的时候,要将它转换为字符串来显示)(converterToString)。 
        Struts2已经内建了对于String和基本类型的类型转换,比如String<-->int 、String<-->boolean等。Struts2不仅提供了内置的类型转换器,还可以自定义类型转换器,以满足自定义需求。比如说:用户登陆框用户名和密码在同一个输入框用‘;’号隔开,比如说用户注册的生日(假如为birthday)输入方式:yyyy/MM/dd或yyyy年MM月dd日等等不同的格式,当然struts2会对日期类型自行转换,但是只会识别“yyyy-MM-dd”这种格式。
        在Struts2中,支持全局类型转换和局部类型转换两种方式。所谓全局类型转换,即在所有的action/model中,都用同一个类型转换器来转换某种特定类型的对象;而局部类型转换,意思就是针对某个action/model中的属性所定义的特定的类型转换器。



        全局类型转换和局部类型转换的实现方式差不多,这里就仅以局部类型转换为类,看看是怎么实现的。

        我们完成这样的功能:在界面,用户名和密码在同一个输入框用‘;’号隔开,服务端解析出来。


1.简单设计一下界面
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!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=GB18030">
		<title>Insert title here</title>
	</head>
	
	<body>
		<h1>使用分号隔开用户名和密码信息</h1>
		<form action="userAction.action">
			user info:<input type="text" name="user"><br>
			<input type="submit" value="submit">
		</form>
	</body>
</html>

2.封装User这个类
package com.zhanglianhai.bean;

public class User {
	private String username;
	private String password;

	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

3.实现Action类
package com.zhanglianhai.struts2;

import com.opensymphony.xwork2.ActionSupport;
import com.zhanglianhai.bean.User;

public class UserAction extends ActionSupport {
	private User user;

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

	@Override
	public String execute() throws Exception {
		System.out.println("username:" + user.getUsername());
		System.out.println("username:" + user.getPassword());
		return SUCCESS;
	}
}

4.通过继承StrutsTypeConverter来实现我们的转换器
package com.zhanglianhai.converter;

import java.util.Map;
import java.util.StringTokenizer;
import com.zhanglianhai.bean.User;

import ognl.DefaultTypeConverter;

public class UserConverter extends DefaultTypeConverter {
	@Override
	public Object convertValue(Map context, Object value, Class toType) {
		if (User.class == toType) { // 从页面向后台对象转换
			String[] str = (String[]) value;
			String firstValue = str[0];
			StringTokenizer st = new StringTokenizer(firstValue, ";");

			String username = st.nextToken();
			String password = st.nextToken();

			User user = new User();
			user.setUsername(username);
			user.setPassword(password);

			return user;
		} else {
			return null;
		}
	}
}

5.编写属性文件
        这是非常关键的一步,需要在与Action/Model类同一个包下面,定义 Action/Model类名-conversion.properties 文件,并在文件内部用这样的格式来声明哪个属性需要用哪个类型转换器:
属性名=转换器的全路径类名
user=com.zhanglianhai.converter.UserConverter


实现就是这样,很简单吧,最后我们看一下效果:
技术分享

技术分享

struts2进阶【2】——类型转换

标签:

原文地址:http://blog.csdn.net/zhanglianhai555/article/details/43983547

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!