struts轉換器詳細

轉載自:http://www.itivy.com/java/archive/2012/3/6/634666475287515374.html

一  轉換器的介紹

Struts2的類型轉換器實際上是基於OGNL實現的,在OGNL項目中有一個ognl.TypeConverter接口,這個接口就是實現類型轉換器必須實現的接口,實現類型轉換器必須實現上面的TypeConverter,不過上面的接口裏的方法過於複雜,所以OGNL項目還提供了一個該接口實現類:ognl.DefaultTypeConverter,通過繼承該類實現自己類型轉換器

二  實例分析詳解

1.aultTypeConverter的方法舉例:

package cn.csdn.hr.converter;

import java.util.Map;

import cn.csdn.hr.domain.User;

import ognl.DefaultTypeConverter;

public class UserConverter extends DefaultTypeConverter {

    @Override

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

       // 根據toType判斷轉換的方向是否是從字符串轉換成對象

       if (toType == User.class) {

           // 系統請求參數的字符串,因爲要包含多種類型

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

 

           // 創建User對象

           User user = new User();

           // 爲屬性賦值

           user.setName(values[0]);

           user.setAge(Integer.valueOf(values[1]));

 

           // 返回

           return user;

       } else {

           // 從對象轉換爲字符串

           User user = (User) value;

           return user.toString();

       }

    }

}

分析參數的含義:

            

ConvertValue方法的作用

該方法完成類型轉換,不過這種類型轉換是雙向的,當需要把字符串轉化對象實例時,通過該方法實現,當把對象實例轉換成字符串時也通過該方法實現。這種轉換是通過toType參數類型是需要轉換的目標類型。所以可以根據toType參數來判斷轉換方向。

ConvertValue方法參數和返回意義

l  第一個參數:context是類型轉換環境的上下文

l  第二個參數:value是需要轉換的參數,根據轉換方向的不同value參數的值也是不一樣的。

l  第三個參數:toType是轉換後的目標類型

l  該方法的返回值是類型轉換後的值。該值的類型也會隨着轉換的方向的改變而改變。由此可見轉換的convertValue方法接受需要轉換的值,需要轉換的目標類型爲參數,然後返回轉換後的目標值

l  Value爲什麼是一個字符串數組?

l  對於DefaultTypeConverter轉換器而言,它必須考慮到最通用的情形,因此他把所有請求參數都視爲字符串數組而不是字符串。相當於getParameterValues()獲取的參數值

     

 

2. 封裝User類,屬性爲name和age,必須要有無參構造,get和set方法,在這裏就不多說了。

3.在jsp頁面要傳值,代碼爲:

<body>

   <div align="center">

        <h1>瞭解struts2的類型轉化器,並寫出自己的類型轉化器</h1>

        <form action="${pageContext.request.contextPath}/user/addUsers.action">

        <!-- 把兩個input的name值都設爲user,傳過去之後當成數組轉換 -->

           用戶名:<input type="text" name="user"/><Br/>

           年齡:

           <input type="text" name="user"/><Br/>

           <input type="submit" value="http://www.cnblogs.com/lonelysharer/archive/2012/03/09/測試"/><Br/>

        </form>

   </div>

  </body>

4.配置struts.xml

<?xml version="1.0" encoding="GBK"?>

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <package name="tsyser" extends="struts-default" namespace="/user">

       <action name="addUsers" method="execute" class="cn.csdn.hr.action.UserAction">

           <result>../index.jsp</result>

       </action>

    </package>

</struts>

 

 

5.配置UserAction.java,來接收值並且把接收的值通過自定義的轉換器轉換爲相應的類型

 

package cn.csdn.hr.action;

import cn.csdn.hr.domain.User;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

    private static final long serialVersionUID = 1L;

    //  轉換器通過user屬性來

    private User user;

    public UserAction(User user) {

       super();

       this.user = user;

    }

    public UserAction() {

       super();

       // TODO Auto-generated constructor stub

    }

 

    public User getUser() {

       return user;

    }

 

    //注入

    public void setUser(

           User user) {

       System.out.println("set方法================");

       this.user = user;

    }

   

    public  String execute(){

      

       System.out.println("user對象"+user);

       System.out.println(user.toString());

       return SUCCESS;

    }

}

6.最重要的是要註冊局部類型轉換器,在和action一個包下注冊,名爲UserAction-conversion.properties,並且添加屬性:

user=cn.csdn.hr.converter.UserConverter

注意user就是在就是在jsp頁面中input中的name的值

來源:http://blog.csdn.net/hanxiaoshuang321123/article/details/7325223
發佈了8 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章