您的位置:首页 > 编程语言 > Java开发

struts2自定义类型转换器

2013-06-10 10:29 363 查看
struts2除了自身提供的类型转换以为,还允许自定义类型转换器,首先表单中的name属性必须和action中的属性同名,然后编写自定义的TypeConverter,可以实现TypeConverter接口,也可以继承DefaultTypeConverter来实现,最简单的是继承StrutsTypeConverter。不过前者比较复杂,后者比较方便。完成类型转换器以后,再将类型转换器注册,这样就能使用了,注册的时候,可以注册为局部类型转换器和全局类型转换器。 

Jsp代码  


<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%>  

<%@ taglib uri="/struts-tags" prefix="s" %>  

<!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=UTF-8">  

<title>Insert title here</title>  

</head>  

<body>  

    <s:form action="loginUser.action" method="post">  

        <s:textfield name="user" label="username"></s:textfield>  

        <s:submit value="submit"></s:submit>  

    </s:form>  

</body>  

</html>  

Action类: 

Java代码  


package com.randy.action;  

  

import com.opensymphony.xwork2.ActionSupport;  

import com.randy.entity.User;  

  

public class LoginUserAction extends ActionSupport {  

  

    private static final long serialVersionUID = -2780543136638232430L;  

    private User user;  

      

    public String execute() {  

        if("randy".equals(user.getUsername())&&"jin".equals(user.getPassword())) {  

            return SUCCESS;  

        }  

        return LOGIN;  

    }  

  

    public User getUser() {  

        return user;  

    }  

  

    public void setUser(User user) {  

        this.user = user;  

    }  

  

}  

类型转换器: 

Java代码  


package com.randy.convertor;  

  

import java.util.Map;  

  

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;  

import com.randy.entity.User;  

  

public class UserConvertor extends DefaultTypeConverter {  

  

    public Object convertValue(Map context, Object value, Class toType) {  

        if (toType == User.class) {  

            String[] params = (String[]) value;  

            User user = new User();  

            String[] userValues = params[0].split(",");  

            user.setUsername(userValues[0]);  

            user.setPassword(userValues[1]);  

            return user;  

        } else if (toType == String.class) {  

            User user = (User) value;  

            return user.getUsername() + "," + user.getPassword();  

        }  

        return null;  

    }  

  

}  

注册文件,LoginUserAction-conversion。properties(局部的): 

Properties代码  


user=com.randy.convertor.UserConvertor  

此文件放在与action同包中。 
转换器一般都提供两者的互相转换。 
context是类型转换的上下午环境,value是要转换的值,toType是目标转换类型。 
全局类型转换器的话,配置文件中的内容为:

Properties代码  


com.randy.entity.User=com.randy.convertor.UserConvertor  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: