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

原创 2012年03月29日 08:56:40

        其他知识点点击链接:

        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


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

struts2学习笔记3数据类型转换

  • 2010年04月07日 20:49
  • 3.26MB
  • 下载

Struts2学习笔记之类型转换 二

Struts2学习笔记之类型转换Struts2之类型转换一第一次笔记中,在convert类型装换类中只涉及到了对象从页面像后台转换的,这一节将对从后台向页面转换进行完善。output.jsp Ins...

尚硅谷学习笔记--Struts2 类型转换(1)

概述 为什么要类型转换? 从一个 HTML 表单到一个 Action 对象, 类型转换是从字符串到非字符串. 但是HTTP 没有 “类型” 的概念. 每一项表单输入只可能是一个字符串或一个字符串数...

Struts2 学习笔记——数据类型转换

我们都知道,在发出的Http请求信息中,所有的请求参数都是字符串类型的。但是我们在后台处理这些数据时,可能需要将某些参数转化成相应的数据类型后才进行业务逻辑的处理。 在Struts2框架中,提供...

Struts2学习笔记之类型转换 API

Struts类型转换的APIStruts2的类型转换器实际上是基于OGNL实现的,在OGNL项目中有一个ognl.TypeConverter接口,这个接口就是实现类型转换器必须实现的接口。该接口定义如...

Struts2学习笔记(十二) 类型转换(Type Conversion)(下)

null引用处理 我们知道,我们在Action中定义属性时并没有对他们进行初始化,那么也就是Struts2在对请求参数进行类型转换时,我们的Action属性可能还是null。那么框架会自动将这些nu...

Struts2.x 学习笔记 之 类型转换与复杂属性

①明确,什么是复杂属性?  就是这个属性包含其他属性,(其实就是这个类组合了其他类的对象②如何复杂属性如何处理?  struts2 表单标签的 name 值可以被赋为 属性的属性:name=mange...

Struts2学习笔记之类型转换 一

Struts2之类型转换 一类型转换让值的传递变的更加方便灵活,下面以一个学习的例子来说明请求端jsp代码 user.jsp Insert title here us...

Struts2学习笔记1-类型转换

Struts2提供了很多基本类的类型转换
  • zzycjcg
  • zzycjcg
  • 2014年04月07日 16:52
  • 273

Struts2的自定义页面提交对象类型转换

Struts2能自动的将页面表单提交的字符串类型转换成八种基本类型,或者Date类型、String类型等,而自定义类型的转换则可以自己通过代码显式的设定进行转换。 1.新建完成类型转换类,继承Defa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts2学习笔记(二)之页面与后台对象的类型转换
举报原因:
原因补充:

(最多只允许输入30个字)