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就是你自己寫的那個轉換器類。寫完之后保存。這樣一個類型轉換過程就完成了!

效果圖如下:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM