Fenriswolf 程式筆記

奮利斯狼的地盤,小綿羊勿入

DWR – 自訂 converter

某些情況之下需要自訂 java objects 轉成 javascript objects 的方式(例如欄位合併)
或是改變 dwr 預設的轉換方式
dwr 提供了 converter 的介面可方便自己定義

org.directwebremoting.extend.Converter 定義了兩個 methods

  • 轉換 json 字串成 java object
public Object convertInbound(Class paramType, InboundVariable iv, 
               InboundContext inctx)
  • 轉換 java object 成 json 字串
public OutboundVariable convertOutbound(Object data, OutboundContext outctx)

假設一個例子需要做 string 的轉碼
可 繼承 dwr 預設的 StringConverter 並在 dwr.xml 中 override 原來的 converter
以下是實作的方式
1. 自定 StringEncodingConverter

public Object convertInbound(Class paramType, InboundVariable iv, InboundContext inctx)
        throws MarshallException {
    String str = LocalUtil.decode(iv.getValue());

    try {
        str = new String(str.getBytes("big5"), "iso8859-1");
    } catch (UnsupportedEncodingException e) {
        log.error("decode error", e);
    }

    return str;
}

public OutboundVariable convertOutbound(Object data, OutboundContext outctx)
        throws MarshallException {
    String str = null;

    try {
        str = new String(data.toString().getBytes("iso8859-1"), "big5");
    } catch (UnsupportedEncodingException e) {
        log.error("encode error", e);
    }

    String escaped = JavascriptUtil.escapeJavaScript(str);
    return new SimpleOutboundVariable('\"' + escaped + '\"', outctx, true);
}

2. 設定 dwr.xml
a. 宣告自定的 converter
dwr 內有一個 converter map,id 就是 map 的 key
這裡是為了蓋掉預設值才設為 “string",如果不希望沖到請用特殊一點的名稱

<init>
    <converter id="string"
        class="com.fw.dwr.StringEncodingConverter" />
</init>

b. 註冊到 ConverterManager
converter 屬性的值就是上方定義的 id

<convert converter="string" match="java.lang.String" />

 
 
執行環境
JDK 1.5.0_06
tomcat 6.0.10
spring 2.5
dwr 2.0.5

參考資料
Configuring DWR – dwr.xml

程式下載
StringEncodingConverter.java
dwr.xml

廣告

2012/03/21 - Posted by | Java Tool |

仍無迴響。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

%d 位部落客按了讚: