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

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

Trimpath提供一個(gè)客戶端的js模板,如果從服務(wù)器回來的數(shù)據(jù)很復(fù)雜,要?jiǎng)討B(tài)改變Html元素是比較費(fèi)力的事情;用trimpath就方便許多;

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

所以有個(gè)問題就是:怎么讓ajax調(diào)用返回一個(gè)javascript對(duì)象?

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

所以解決方案就是,在springmvc框架中,用response返回json string,給ajax 客戶端,然后生成javascript對(duì)象,然后,調(diào)用trimpath模板,然后,動(dòng)態(tài)修改頁面。

代碼片段:

    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;

    }