Jquery autocomplete在struts2中的使用及體會(json plugin)

     struts2項目中需要在頁面上使用jquery的autocomplete,在網上查到可以用struts2的json plugin,就此麻煩開始。先下載了json0.34,老是提示出錯,找不到某某方法,一看說是版本問題,我用的是struts2.1.6,按json plugin的網站說的,0.34應該支持struts2.1.x的,卻不能支持。只好下載0.33來用,還不錯,這次沒有鬧騰,順利調通。

     接下來的問題是jquery的autocomplete接收的字符串不是標準的json格式,而是string|string|string/n(換行用於區分每組值)。一開始想修改autocomplete的腳本,但看上去很不方便,因爲現在的autocomplete是支持多個值的,例如取user值,可以附帶user fullname,以及email等其他值。組合的格式是,userId|fullname|email.../n,如果想要再附加多個值都可以。而json格式是key-value格式的,這個key是不一定的,對於autocomplete來說,就要和具體邏輯綁定在一起。這樣修改是不划算的。

     json plugin本身顯得比較山寨,文檔上顯示plugin停止更新了,由struts2-json-plugin.jar在struts2.1.7包含發佈,但並沒有對新的jar如何使用沒有提供文檔,不知道是不是和原來的一樣。另外,從json plugin生成json的方式看,感覺很耗資源,要產生一個有實用價值的的json字符串,需要有對應名字的set方法,外帶有list的參數,而list中要包含map的key-value對象,一個獲取名字的功能,一次取100條記錄的話,資源消耗十分厲害。

     此時,考慮到ajax的用法應當是朝着開放而自由的方向,而並非要受到各種限制。例如,日後如果發起xhr請求之後,需要服務器返回json,xml或者自己定製格式的結果的話,目前的方案是無法滿足要求的。所以決定再去struts2的網站上查一查,看看有無其他支持ajax的方法,一查果然有。具體內容如下:

 

package actions;

import java.io.InputStream;
import java.io.StringBufferInputStream;
import com.opensymphony.xwork2.ActionSupport;

public class TextResult extends ActionSupport {
      private InputStream inputStream;
      public InputStream getInputStream() {
          return inputStream;
      }

 

      public String execute() throws Exception {
          inputStream = new StringBufferInputStream("Hello World! This is a text string response from a Struts 2 Action.");

          此處的StringBufferInputStream從jdk1.1開始就淘汰了,用ByteArrayInputStream代替,將字符串轉換爲
byte[]之後new ByteArrayInputStream() 就可以了。在此處可以自己任意組合要返回的字符串,xml,json或者是定製格式。

          return SUCCESS;
      }
}

<action name="text-result" class="actions.TextResult">
    <result type="stream">
        <param name="contentType">text/html</param>
        <param name="inputName">inputStream</param>
    </result>
</action>
用上面的代碼,很順利的調通代碼,也無需修改autocomplete的腳本。這樣,也爲日後更大範圍在項目中使用ajax找到一個穩定的途徑。
     通過上面的經歷,明顯感覺到那些所謂的插件,例如對dojo,jquery等知名ajax的包裝,很明顯是畫蛇添足,沒啥前途的。這方面還是
直接使用dojo.js或是jquery.js來的好,想用任何流行的widget都可以,又何必去等這個所謂的插件呢。這個和.net的ajax社區開發的ajax
lib方向上有點像,過度包裝後,失去了其靈活性,修改和維護的代價過大,不值得。也令人不放心。
發佈了38 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章