其他知识点点击链接:

        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