zoukankan      html  css  js  c++  java
  • struts2自定义类型转换器

    客户端发送过来的数据都是以String[]的形式保存的。在struts2里面仅仅很少的数据类型转换支持,例如原生的数据类型。还有常见的String或者Date类型。struts无法知道我们会使用哪种数据类型。所以它提供一些实现自定义类型转换的类。具体的转换过程如下:

    首先我们要定义好我们需要的数据类型。例如定义一个User类型。User类代码如下:

    package com.struts2.customtype;
    
    public class User {
        private String name;
        private String surname;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getSurname() {
            return surname;
        }
        public void setSurname(String surname) {
            this.surname = surname;
        }
        
    }

    然后定义action类来处理请求:

    package com.struts2.customaction;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.struts2.customtype.User;
    
    public class UserAction extends ActionSupport{
        private User user;
    
        public User getUser() {
            
            return user;
        }
    
        public void setUser(User user) {
            
            this.user = user;
        }
    
        @Override
        public String execute() throws Exception {
            // TODO Auto-generated method stub
            
            return ActionSupport.SUCCESS;
        }
        
    }

    接着我们就来定义自定义类型转换器,这个转换器需要继承一个类叫:DefaultTypeConverter类。它是由obgl这个包提供的。我们要重写里面的convertValue方法,然后这个方法会被struts调用。代码如下:

    package com.struts2.conversion;
    
    import java.lang.reflect.Member;
    import java.util.Map;
    import java.util.StringTokenizer;
    import com.struts2.customtype.User;
    import ognl.DefaultTypeConverter;
    
    public class UserConversion extends DefaultTypeConverter{
    @Override
    public Object convertValue(Map context, Object target, Member member,
            String propertyName, Object value, Class toType) {
        // TODO Auto-generated method stub
        if(toType==User.class){
            
            String[] param=(String[]) value;
            StringTokenizer st= new StringTokenizer(param[0], ";");
            String name=st.nextToken();
            String surname=st.nextToken();
            
            User user=new User();
            user.setName(name);
            user.setSurname(surname);
            
            return user;
        }
        else if (toType==String.class) {
            User user=(User) value;
            
            return "your name is : "+user.getSurname()+"  "+user.getName();
        }
        return null;
    }
    }

    我在convertValue方法里面实现了转换的过程,就是判断如果是字符串类型就将字符串分割成两部分,一部分是用户名,一部分是密码。然后将分割好的两个字符串赋予一个新new出来的User对象。然后将这个user对象return回去。这样就实现了一个转换。

    后面代码原理一样。

    这样我们就写好了一个我们自己的类型转换器。

    现在我们写了三个类。这三个类现在还是毫无关系的。那么如何将他们关联起来呢?struts让我们在自定义action 的包下建一个properties文件。这个文件名字有要求的。文件名为:aactionname-conversion.properties 

    然后我们在这个文件里面填写对应的键值对,field=actionconvert.Class。 field就是你的action 里面要被转换的属性的名字。actionconvert.Class就是你自己写的那个转换器类。写完之后保存。这样一个类型转换过程就完成了!

    效果图如下:

  • 相关阅读:
    (转)DirectInput编程基础
    怎么样解决3D 地形、天空盒等网格模型出现缝隙的问题
    D3DLIGHT9光源
    D3DXCreateTextureFromFileEx
    CreateVertexBuffer和CreateIndexBuffer
    D3D中材质通过D3DMATERIAL9结构说明
    IDirect3DVertexBuffer9::Lock和IDirect3DIndexBuffer9::Lock
    D3DPRESENT_PARAMETERS_结构(D3D初始化)(
    Windows Phone开发(6):处理屏幕方向的改变
    Windows Phone开发(4):框架和页
  • 原文地址:https://www.cnblogs.com/JieWen/p/5777453.html
Copyright © 2011-2022 走看看