上一個項目使用的是spring MVC 客戶需要做Ajax應用;所以就找了一些資料研究了一下,比如DWRdojo prototypeJSON-RPC, trimpath 等等,發現很多不適合我們,比如DWR要生成客戶端js,服務器端還要部署,麻煩;dojo又太慢了;經過一輪淘汰剩下了prototypetrimpath;所以最終就選這2個了;

Prototype在書寫普通的js時候,有很多好處,比如簡單,實用的很多函數;比如$()系列;

Trimpath提供一個客戶端的js模板,如果從服務器回來的數據很復雜,要動態改變Html元素是比較費力的事情;用trimpath就方便許多;

在模板語言的世界里,總有2個東西:模板和模板中的數據;trimpath的模板接受的數據是javascript object,模板則定義在一個不顯示的textarea里面;

所以有個問題就是:怎么讓ajax調用返回一個javascript對象?

后來,我終于發現了(想起了劉若英)JSON;發現json是個好東東;比xml輕量級,又可以很容易的轉換為javascript對象,而且還有java api;唉,開源的世界多美妙;

所以解決方案就是,在springmvc框架中,用response返回json string,給ajax 客戶端,然后生成javascript對象,然后,調用trimpath模板,然后,動態修改頁面。

代碼片段:

    public ModelAndView getClient(HttpServletRequest request, HttpServletResponse response) throws Exception {

        JSONObject jsonObject = new JSONObject();

        Client client=clientMgr.getClientByPk(Long.parseLong(request.getParameter("clientId")));

        jsonObject.add("client", client);

        return ajaxResponse(jsonObject, response);

    }

    protected ModelAndView ajaxResponse(JSONObject jsonObject, HttpServletResponse response) throws Exception {

        response.setContentType("application/x-json;charset=UTF-8");

        response.getWriter().print(jsonObject);

        return null;

    }