Struts2学习笔记(二)之页面与后台对象的类型转换

标签: strutsstringuserobjectclassexception
4706人阅读 评论(0) 收藏 举报
分类:

        其他知识点点击链接:

        1:Struts2学习笔记(一)初步了解Struts2以及配置     

        2:Struts2学习笔记(三)之输入校验(使用直接编码方式)

        3:Struts2学习笔记(四)之Struts2访问Servlet API  

        4:Struts2学习笔记(五)之异常处理机制     

        5:Struts2学习笔记(六)之控制单个与多个文件的上传 

        6:Struts2学习笔记(七)之文件的下载



        从页面输入的都是字符串,后台来的一般都是对象,那我们需要从页面得到数据和页面显示字符串之间进行一个转换,类型转换分为局部属性转换和全局转换,这里讲的类型转换比较简单,就算个抱砖引玉吧......

       Struts2的类型转换,对于8个原生数据类型以及String等常见类型,Struts2 可以使用内建的类型转换器实现自动的转换;但对于自定义的对象类型来说,就需要我们自己指定类型转换的方式了。

          

         首先先学习局部属性类型转换,DefaultTypeConverter与StrutsTypeConverter,我们可以继承这两个类都可以实现类型的转换,不过StrutsTypeConverter类是实现了DefaultTypeConverter类,所以一般我们要去进行类型转换,都会继承StrutsTypeConverter类,来看下使用....

         

          步骤:

1:最基本的Struts的配置信息,省略.....(了解请点击:Struts2的基本配置)

2:新建一个继承与DefaultTypeConverter或者StrutsTypeConverter的类;

3:在当前要转换的属性的类的该包下面新建一个配置文件..该配置文件的名字规则为XXXX-conversion.properties(XXX代表当前要转换属性的类名)  看下类结构图片:


   

其中配置文件中的配置信息如下:


       接下来先使用继承与DefaultTypeConverter的方法来实现一下类型转换

①:页面代码如下:

登陆的JSP关键代码:
<body>
		<h1> 
			使用逗号隔开用户名和密码信息 
		</h1>
		<form action="userAction1">
			user info1:
			<input type="text" name="user">
			<br />
			<input type="submit" value="submit">
		</form>
	</body>

显示登陆成功信息JSP页面关键代码
<%@ taglib prefix="s" uri="/struts-tags" %>
<body>
		<s:property value="user"/>
	</body>


 ②:UserAction1.java类如下:

package com.jiangqq.action;

import com.jiangqq.bean.User;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction1 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("Password = "+user.getPassword());
		return SUCCESS;
	}
}


③:类型转换类UserConverter1.java

public class UserConverter1 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, ",");
			User user = new User();
			user.setUsername(st.nextToken());
			user.setPassword(st.nextToken());
			return user;
		} else if (String.class == toType) // 从后台对象-->到页面字符串转换
		{
			User user = (User) value;
			String username = user.getUsername();
			String password = user.getPassword();
			return "username = " + username + "  password = " + password;
		}
		return null;
	}
    

     当然我们还可以继承于StrutsTypeConverter抽象类来进行类型转换,查看StrutsTypeConverter的源代码,我们发现
StrutsTypeConverter类实现了DefaultTypeConverter类:在StrutsTypeConverter中进行类型转换的方法和我们在上面实现的差不多,下图是关联的StrutsTypeConverter代码:

     看下StrutsTypeConverter类中几个主要的方法: 这里我们去实现第一个与第二个抽象方法去进行转换

1:abstract  Object convertFromString(Map context, String[] values, Class toClass)       
2:abstract  String convertToString(Map context, Object o) 
3;convertValue(Map context, Object o, Class toClass) 


 

     把上面的例子,使用实现StrutsTypeConverter抽象类,来进行类型转换的方法代码如下....


package com.jiangqq.converter;

/**
 * 使用继承StrutsTypeConverter的抽象类进行类型转换
 */
import java.util.Map;
import java.util.StringTokenizer;

import org.apache.struts2.util.StrutsTypeConverter;

import com.jiangqq.bean.User;

public class UserConverter2 extends StrutsTypeConverter {

	// 页面字符串往后台对象转换
	@Override
	public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
		String[] str = (String[]) arg1;
		String firstValue = str[0];
		// 分割字符串的类
		StringTokenizer st = new StringTokenizer(firstValue, ",");
		User user = new User();
		user.setUsername(st.nextToken());
		user.setPassword(st.nextToken());
		return user;
	}

	// 后台对象往页面字符串转换
	@Override
	public String convertToString(Map arg0, Object arg1) {
		User user = (User) arg1;
		String username = user.getUsername();
		String password = user.getPassword();
		return "username = " + username + "  password = " + password;
	}

}


    至此已经讲完了局部类型转换,下面说下全局的类型转换

   全局类型转换。在src目录下新建xwork-conversion.properties,该文件的内容是待转换的类=转换器的名字,即 
com.jiangqq.bean.User=com.jiangqq.converter.UserConverter3如下图:




接下来的进行转换的类和上面继承StrutsTypeConverter类其中的实现方法一样,全局类型,只要有User的对象,就去使用UserConverter3.java去进行类型转换,方法和上面的一样


例子代码下载链接:http://download.csdn.net/detail/jiangqq781931404/4182080


13
2

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1069235次
    • 积分:12728
    • 等级:
    • 排名:第1061名
    • 原创:215篇
    • 转载:5篇
    • 译文:1篇
    • 评论:584条
    联系方式
    博客专栏
    最新评论
    底部悬停