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