浅谈Struts2的命名空间及以传统形式返回json数据
生活随笔
收集整理的這篇文章主要介紹了
浅谈Struts2的命名空间及以传统形式返回json数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
Struts2中在B/S傳統應用中使用時需要配置struts.xml文件,?那么Struts2以傳統形式?返回json?? 數據到客戶端同樣也需要配置?struts.xml文件,只是不同的是首先需要在配置文件中需要配置?如下?幾項:1:extends,2:type,3contentType,先貼代碼下面詳細說說這幾項的意思 <package?name="json"?namespace="/chat"?extends="json-default"><action?name="*"?class="chatAction"?method="{1}"><result?name="success"?type="json"><param?name="root">dataMap</param><param?name="contentType">text/html</param><!--?指定是否序列化空的屬性?<param?name="excludeNullProperties">true</param>?-->? <--這里指定將序列化dataMap中的那些屬性?--><!--?<param?name="includeProperties">?userList.*?</param>??--> <--這里指定將要從dataMap中排除那些屬性,這些排除的屬性將不被序列化,一般不與上邊的參數配置同時出現?--><!--?<param?name="excludeProperties">?SUCCESS?</param>?--></result></action></package><package?name="shop"?namespace="/plat"?extends="json-default"><action?name="*"?class="platAction"?method="{1}"><result?name="success"?type="json"><param?name="root">dataMap</param><param?name="contentType">text/html</param></result></action></package> package中的extends屬性在返回json數據時不再繼承自struts-default?,而是繼承json-default,同時? result里的type類型為json?,并且需要設置param的name屬性contentType為text/html?(此處?的設置為? 了處理個別瀏覽器訪問提示下載問題?,網上大部分講的是在Action中設置此項,?但是我只有?在這里設置有? 效果不知原因。。。。),?action的訪問方式我選擇的是動態路徑即:設置name=“*”?method=“{1}”?(? 該方式作用是指向chatAction中的所有方法),?至于namespce那處至少需要寫上“/”,否則會訪問失敗,?? 當然這里也可以配置你要訪問的路徑,到時訪問action的?時候只需要在action的name的名字前面+上namespace? 的值,?本例中如下:chat/具體方法名即可,package的名字可以?隨便寫,只需保證不重復即可,不一定要是? 具體類的的包路徑?,此舉只是為了區分不同的類,至于param的name屬性?root為dataMap,此處是依據在? Action中創建的map?等集合參數有關代碼如下: public?Map<String,?Object>?getDataMap()?{return?dataMap;}public?ShopAction()?{//?初始化Map對象dataMap?=?new?HashMap<String,?Object>();}//?查詢地圖對應的詳細信息public?String?getShopDetails()?throws?Exception?{//?chatAction.getCommonParameters();HttpServletResponse?response?=?ServletActionContext.getResponse();HttpServletRequest?request?=?ServletActionContext.getRequest();request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=utf-8");//?String?shop_id?=?URLDecoder.decode(request.getParameter("shop_id"),//?"UTF-8");int?shop_id?=?Integer.parseInt(request.getParameter("shop_id"));//?查詢商鋪的屬性shopDetails?=?shopService.findByshop_id(shop_id);shop_DetailsJSON.setAddress(shopDetails.getAddress());shop_DetailsJSON.setPlace_introduce(shopDetails.getPlace_introduce());shop_DetailsJSON.setBusiness_time(shopDetails.getBusiness_time());shop_DetailsJSON.setPhone_number(shopDetails.getPhone_number());//?查詢shop_tag屬性JSONArray?array?=?new?JSONArray();shop_tag?=?shopService.findTagById(shopDetails.getId());shop_tagJSON.setTag_icon(shop_tag.getTag_icon());shop_tagJSON.setTag_name(shop_tag.getTag_name());shop_tagJSON.setTag_value(shop_tag.getTag_value());shop_DetailsJSON.getShop_tag().add(shop_tagJSON);//?查詢評價屬性evaluate?=?shopService.findEvaluateById(shopDetails.getId());evaluateJSON.setWord(evaluate.getWord());evaluateJSON.setTime(evaluate.getTime());evaluateJSON.setPerson(evaluate.getPerson());shop_DetailsJSON.getEvaluate().add(evaluateJSON);//?查詢images的屬性List<Images>?imagesList?=?shopService.findImageById(shopDetails.getId());for?(Images?imageList?:?imagesList)?{System.out.println(imageList.getImage_url());imagesJSON.setImage_url(imageList.getImage_url());array.add(imageList);}//?shop_DetailsJSON.getImages().add(imagesJSON);dataMap.put("images",?array);dataMap.put("data",?shop_DetailsJSON);return?SUCCESS;} 需要指出的是,此時的map集合必須有get方法,否則顯示json數據為null?,如果想要返回的json數據為? 數組類型,只需要用JSONArray等?API把對象或者集合扔進去再放進map即可。?如果想要不序列化? 或者序列化某一屬性,只需要在struts.xml文件中配置?,??這兩項即可。如不足,歡迎指教!<!--?指定是否序列化空的屬性?<param?name="excludeNullProperties">true</param>?--><--???這里指定將序列化dataMap中的那些屬性?--><!--?<param?name="includeProperties">?userList.*?</param>??--> <--這里指定將要從dataMap中排除那些屬性,這些排除的屬性將不被序列化,一般不與上邊的參數配置同時出現?--><!--?<param?name="excludeProperties">?SUCCESS?</param>?-->轉載于:https://my.oschina.net/dyl226/blog/534416
總結
以上是生活随笔為你收集整理的浅谈Struts2的命名空间及以传统形式返回json数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js原生图片拼图Demo
- 下一篇: 【iOS开发】跳转到『设置App』的任意