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

        其他知识点点击链接:

        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


  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值