浅谈Struts2的命名空间及以传统形式返回json数据
2015-11-23 00:00
525 查看
摘要: Struts2,json,namespace,Xml
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> -->
相关文章推荐
- java文件输入输出
- Spring with Hibernate persistence and transactions
- Java基本数据类型与封装类的区别
- Java synchronized
- Java包 Package
- Java虚拟机类加载机制
- java内部类
- JAVA_SE基础——54.异常
- java提供的一些并发机制
- Java线程池技术
- 【Java学习笔记】——JDK与JRE的区别
- java多线程-1
- 配置Java_home和配置临时环境变量
- (spring-第9回【IoC基础篇】)BeanFactoryPostProcessor,实例化Bean之前的第二大利器
- JAVA中的“抽象接口”
- 关于Integer.IntegerCache
- java date类 时间
- JDK自带方法实现AES对称加密
- Spring MVC的启动过程
- SpringMVC之controller篇