zoukankan      html  css  js  c++  java
  • struts2自定义类型转换(2)基于StrutsTypeConverter

    实现自定义类型转换器 

       

        实现TypeConverter接口,或者继承DefaultTypeConverter实现类(该类实现了TypeConverter接口),通过继承该实现类来实现自己的类型转换器。重写convertValue方法即可。 

        为了简化类型转换器的实现,Struts2提供了一个StrutsTypeConverter抽象类,这个抽象类是DefaultConverter的子类。实现了方法,并提供了2个不同转换方向的方法:
    Object  convertToString(Map context,String[] values,Class toClass)String convertFromString(Map context,Object o)。

    注册应用

        实现了自定义类型转换器之后,将该类型转换器注册在Web应用中,Struts2框架才可以正常使用该类型转换器。
    关于类型转换器的注册方式,主要有一下几种: 
    A、注册局部类型转换器:仅仅对某个Action的属性起作用。
    B、注册全局类型转换器:对所有Action的特定类型的属性都会生效。

       1、局部类型转换器
          提供如下格式的文件 
          文件名: ActionName-conversion.properties  
         内容:多个propertyName(属性名)=类型转换器类(含包名),如 date=com.aumy.DateConverter 
         存放位置:和ActionName类相同路径。 

        2、全局类型转换器  
           提供如下格式的文件 
          文件名: xwork-conversion.properties 
          内容: 多个“复合类型=对应类型转换器”项组成,如 java.Util.Date=com.aumy.DateConverter 
          存放位置:WEB-INF/classes/目录下。

    User.java

    package com.org;
    
    public class User {
    	private String username;
    	private String password;
    	public String getUsername() {
    		return username;
    	}
    	public void setUsername(String username) {
    		this.username = username;
    	}
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    	
    }
    

    UserAction.java

    package com.org;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class UserAction extends ActionSupport {
    	private User user;
    
    	public void setUser(User user) {
    		this.user = user;
    	}
    	public User getUser() {
    		return user;
    	}
    
    	
    	@Override
    	public String execute()throws Exception{
    		//测试信息 
    		System.out.println("username: "+getUser().getUsername());
    		System.out.println("password: "+getUser().getPassword());
    		return SUCCESS;
    	}
    	
    }
    

    UserConvert.java

    package com.org;
    
    import java.util.Map;
    import java.util.StringTokenizer;
    
    import org.apache.struts2.util.StrutsTypeConverter;
    
    import ognl.DefaultTypeConverter;
    
    public class UserConvert extends StrutsTypeConverter {
    
    	//当需要将字符串向User类型转换时
    	@Override
    	public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
    		// TODO Auto-generated method stub
    		//创建一个User实例 
    		User user = new User();
    		//请求参数数组第一个数组元素
    		String value = arg1[0];
    		//将该字符串分割成字符数组 
    		String values[] = value.split(";");
    		user.setUsername(values[0]);
    		user.setPassword(values[1]);
    		return user;
    	}
    
    	//当需要将User实例转换成字符串时
    	@Override
    	public String convertToString(Map arg0, Object value) {
    		// TODO Auto-generated method stub
    		//将需要转换的值强制类型转换为User实例 
    		User user = (User)value;
    		String str = "Username: "+user.getUsername()+",Password: "+user.getPassword();
    		return str;
    	}
    	
    	
    }
    

    UserAction-conversion.properties

    user=com.org.UserConvert

    struts.xml

    <struts>
    
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.devMode" value="false" />
    
        <package name="default" extends="struts-default">
             <action name="userAction" class="com.org.UserAction">
                <result name="success">/success.jsp</result>
             </action>
        </package>
    
    </struts>


  • 相关阅读:
    工程思维
    小骆驼 第三章 列表与数组
    小骆驼 第二章 标量数据
    小骆驼 第二章 标量数据
    小骆驼 第二章 标量数据
    split和join合写
    Competition and Predation
    What is the difference between Θ(n) and O(n)?
    数学基础之概率统计
    enumerate()函数
  • 原文地址:https://www.cnblogs.com/itmyhome/p/4131584.html
Copyright © 2011-2022 走看看