`

Struts2 json ajax动态显示列表

阅读更多

 

关于在Struts2中结合json使用ajax进行动态无刷新查询某个列表并在前段显示,这里不是简单的刷新页面的某个属性,而是列表,即对应action中查询出ArrayList转换成json数据在前段通过js处理后来替换页面中某个容器的内容。

对于Struts2与json的基本配置将不在这里记录。下面将通过代码进行一一阐述,其中的关键类JsonUtil是早些时候获得于网络,已忘记原文地址,在此感谢前辈。

struts_member.xml 内容

 

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.         "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5. <struts>  
  6.          <package name="user" extends="json-default" namespace="/user">  
  7.             <action name="qryOrder" class="productAction" method="qryOrder">  
  8.             <interceptor-ref name="params"/>  
  9.                 <result type="json"></result>  
  10.             </action>  
  11.         </package>  
  12. </struts>  

 

其中json-default已经extends struts_base.xml

applicationContext.xml 申明action和service

 

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="ISO-8859-1"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  3. <beans>  
  4.     .  
  5.     .  
  6.     .  
  7.     .  
  8.     .  
  9.     .  
  10.     <!-- Services -->  
  11.       
  12.     <bean id="orderService" parent="transactionProxy">  
  13.       <property name="target">  
  14.         <ref bean="orderTarget"/>  
  15.       </property>  
  16.     </bean>  
  17.       
  18.     <bean id="productAction" class="com.app.web.actions.ProductAction" singleton="false">  
  19.         <property name="orderService">  
  20.             <ref bean="orderService"/>  
  21.         </property>  
  22.     </bean>  
  23. </beans>  

 

ProductAction 内容

 

[java] view plaincopy
  1. package com.app.web.actions;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. import org.apache.log4j.Logger;  
  5. import org.apache.struts2.ServletActionContext;  
  6. import com.googlecode.jsonplugin.annotations.JSON;  
  7. import com.netshop.comm.Constant;  
  8. import com.netshop.comm.JsonUtil;  
  9. import com.netshop.comm.lucene.ArticleSearchUtil;  
  10. import com.netshop.model.member.MemberService;  
  11. import com.netshop.model.order.IOrderService;  
  12. import com.netshop.model.order.Order;  
  13. import com.netshop.model.product.IProductService;  
  14. import com.netshop.web.baseaction.AbstractAction;  
  15. public class ProductAction extends AbstractAction{  
  16.     static Logger log = Logger.getLogger(ProductAction.class);  
  17.       
  18.     private IOrderService orderService;  
  19.     private List<Order> orderList;  
  20.     private int proId;  
  21.     private String jsonResult;  
  22.       
  23.     /** 
  24.      * 查询订单列表 
  25.      * @return 
  26.      * @throws Exception 
  27.      */  
  28.     public String qryOrder() throws Exception{  
  29.         try{  
  30.                         //查询  
  31.             StringBuffer sql = new StringBuffer("SELECT m.email,m.level,o.proNum,o.orderTime FROM  Order AS o ,Member AS m WHERE o.productId=");  
  32.             sql.append(proId).append(" AND o.status=").append(Constant.WAIT_BUYER_GOTO_PAY).append(" AND o.memberId=m.id");  
  33.             ArrayList list = (ArrayList) orderService.find(sql.toString());  
  34.            //对查询结果进行处理  
  35.             if(list!=null && list.size()>0){  
  36.                 orderList = new ArrayList<Order>();  
  37.                 for(int i=0;i<list.size();i++){  
  38.                     Object obj[] = (Object[])list.get(i);  
  39.                     if(obj!=null && obj.length==4){  
  40.                               //将查询结果存入order   
  41.                         Order order = new Order();  
  42.                         order.setMemberEmail((String)obj[0]);  
  43.                         order.setMemberLevel(((Integer)obj[1]).intValue());  
  44.                         order.setProNum((Integer)obj[2]);  
  45.                         order.setOrderTime((java.util.Date)obj[3]);  
  46.                              //将order实例存入list  
  47.                         orderList.add(order);  
  48.                     }  
  49.                 }  
  50.             }  
  51.         //orderList借用工具类转化成json类型的串  
  52.             jsonResult = JsonUtil.listToJson(orderList);  
  53.         //申明返回的结果,不然页面上不能显示  
  54.             ServletActionContext.getResponse().setContentType("text/xml");  
  55.         }catch(Exception e){  
  56.             log.info("qryOrder Exception="+e.getMessage());  
  57.             e.fillInStackTrace();  
  58.         }  
  59.         return SUCCESS;  
  60.     }  
  61.       
  62.     @JSON(serialize = false)  
  63.     public IOrderService getOrderService() {  
  64.         return orderService;  
  65.     }  
  66.     public void setOrderService(IOrderService orderService) {  
  67.         this.orderService = orderService;  
  68.     }  
  69.     public List<Order> getOrderList() {  
  70.         return orderList;  
  71.     }  
  72.     public void setOrderList(List<Order> orderList) {  
  73.         this.orderList = orderList;  
  74.     }  
  75.     public int getProId() {  
  76.         return proId;  
  77.     }  
  78.     public void setProId(int proId) {  
  79.         this.proId = proId;  
  80.     }  
  81.     public String getJsonResult() {  
  82.         return jsonResult;  
  83.     }  
  84.     public void setJsonResult(String jsonResult) {  
  85.         this.jsonResult = jsonResult;   

 

Order 类

里面对应的相关属性以及setter,getter方法,将不在说明

JsonUtil 类代码如下:

 

[java] view plaincopy
  1. package com.app.comm;  
  2. import java.beans.IntrospectionException;  
  3. import java.beans.Introspector;  
  4. import java.beans.PropertyDescriptor;  
  5. import java.util.List;  
  6. public class JsonUtil {  
  7.     /** 
  8.      * @param object 
  9.      *            任意对象 
  10.      * @return java.lang.String 
  11.      */  
  12.     public static String objectToJson(Object object) {  
  13.         StringBuilder json = new StringBuilder();  
  14.         if (object == null) {  
  15.             json.append("/"/"");  
  16.         } else if (object instanceof String || object instanceof Integer || object instanceof Double) {  
  17.             json.append("/"").append((String)object).append("/"");  
  18.         } else {  
  19.             json.append(beanToJson(object));  
  20.         }  
  21.         return json.toString();  
  22.     }  
  23.     /** 
  24.      * 功能描述:传入任意一个 javabean 对象生成一个指定规格的字符串 
  25.      *  
  26.      * @param bean 
  27.      *            bean对象 
  28.      * @return String 
  29.      */  
  30.     public static String beanToJson(Object bean) {  
  31.         StringBuilder json = new StringBuilder();  
  32.         json.append("{");  
  33.         PropertyDescriptor[] props = null;  
  34.         try {  
  35.             props = Introspector.getBeanInfo(bean.getClass(), Object.class)  
  36.                     .getPropertyDescriptors();  
  37.         } catch (IntrospectionException e) {  
  38.         }  
  39.         if (props != null) {  
  40.             for (int i = 0; i < props.length; i++) {  
  41.                 try {  
  42.                     String name = objectToJson(props[i].getName());  
  43.                     String value = objectToJson(props[i].getReadMethod().invoke(bean));  
  44.                     json.append(name);  
  45.                     json.append(":");  
  46.                     json.append(value);  
  47.                     json.append(",");  
  48.                 } catch (Exception e) {  
  49.                 }  
  50.             }  
  51.             json.setCharAt(json.length() - 1'}');  
  52.         } else {  
  53.             json.append("}");  
  54.         }  
  55.         return json.toString();  
  56.     }  
  57.     /** 
  58.      * 功能描述:通过传入一个列表对象,调用指定方法将列表中的数据生成一个JSON规格指定字符串 
  59.      *  
  60.      * @param list 
  61.      *            列表对象 
  62.      * @return java.lang.String 
  63.      */  
  64.     public static String listToJson(List<?> list) {  
  65.         StringBuilder json = new StringBuilder();  
  66.         json.append("[");  
  67.         if (list != null && list.size() > 0) {  
  68.             for (Object obj : list) {  
  69.                 json.append(objectToJson(obj));  
  70.                 json.append(",");  
  71.             }  
  72.             json.setCharAt(json.length() - 1']');  
  73.         } else {  
  74.             json.append("]");  
  75.         }  
  76.         System.out.println("----------"+json.toString());  
  77.         return json.toString();  
  78.     }  
  79. }  

 

页面JS部分 :

 

[javascript] view plaincopy
  1. //查询购物车中的商品  
  2. function qryOrder(proId){  
  3.     $.ajax({  
  4.         type: "POST",  
  5.         url: "user/qryOrder.do?proId="+proId,  
  6.         data: "",  
  7.         datatype: "json",  
  8.         contentType: "application/json",  
  9.         success: function(jsonResult) {  
  10.             qryOrderCallBack(jsonResult);  
  11.         },  
  12.         error: function(msg) {  
  13.             location = "../error.jsp";  
  14.             //alert("操作失败,请重试"+msg)   
  15.         }  
  16.     });  
  17. }  
  18. //解析返回得json数据并给页面赋值  
  19. function qryOrderCallBack(responseMsg){  
  20.     var data = eval("("+responseMsg+")");  
  21.     var order = eval(data.orderList);  
  22.     var result = "";  
  23.     if(order==null){  
  24.         alert('order is null');  
  25.         return;  
  26.     }  
  27.     result += "<thead>";  
  28.     result += "<tr class='thead'>";  
  29.     result += "<th scope='col' class='t1'>购买人</th>";  
  30.     result += "<th scope='col' class='t2'>会员级别</th>";  
  31.     result += "<th scope='col' class='t4'>数量</th>";  
  32.     result += "<th scope='col' class='t3'>购买时间</th>";  
  33.     result += "</tr>";  
  34.     result += "</thead>";  
  35.     result += "<tbody>";  
  36.         //这里的order[i]就相当于list中的order,起属性也是一一对应的  
  37.     for(var i=0;i<order.length;i++) {  
  38.         var num = order[i].num;  
  39.         if((i+1)%2==1){  
  40.             result += "<tr class=''>";  
  41.         }else if((i+1)%2==0){  
  42.             result += "<tr class='alt'>";  
  43.         }  
  44.         result += "<td>"+order[i].memberEmail+"***</td>";  
  45.         result += "<td>"+order[i].memberLevel+"</td>";  
  46.         result += "<td>"+order[i].proNum+"</td>";  
  47.         result += "<td class='lower tr'>"+order[i].orderTime+"</td>";  
  48.         result += "</tr>";  
  49.     }  
  50.     result += "</tbody>";  
  51.     $("#orderList").html(result);  
  52. }  

 

页面HTML部分

 

[xhtml] view plaincopy
  1. <div  id="buy-annal">  
  2.                       
  3.                     <table class="buy-record" summary="客户购买记录" cellspacing="0" id='orderList'>  
  4.                           
  5.                     </table>  
  6.                 </div>  

 

 

上面说的是将后台查询的LIST结果如何在前台无刷新进行显示,而对于后台处理结果的普通的JAVABEAN如何在前台显示 ,下面进行简单的进行记录:

比如后台action处理的bean:

CartInfo cartInfo = new CartInfo();
cartInfo.setTotalNum(totalNum);
cartInfo.setTotalFee(df.format(totalFee));

在js中的处理:

//解析返回得json数据并给页面赋值
function responseCallBack(responseMsg){
      var data = eval("("+responseMsg+")");

     //cartInfo 就相当于cartInfo 实例
      var cartInfo = eval(data.cartInfo);
      $("#totalNum").text(cartInfo.totalNum+" 件");
      $("#totalFee").text("¥ "+cartInfo.totalFee);
      .......
}

分享到:
评论

相关推荐

    struts2 json ajax示例 google提示

    在这个"struts2 json ajax示例 google提示"中,我们将探讨如何在Struts2框架中利用JSON和AJAX技术实现Google搜索建议那样的动态数据加载功能。 首先,我们需要在Struts2项目中集成JSON插件。Struts2 JSON插件提供了...

    Struts2Json+ajax的实现 精简源码

    在Struts2框架中实现JSON和AJAX,可以帮助开发者构建更加高效和用户友好的界面。首先,我们需要在`struts.xml`配置文件中启用JSON支持。通过添加`&lt;constant&gt;`标签设置`struts.json.enable=true`,开启Struts2的JSON...

    struts2+jquery+json+ajax例子

    Struts2、jQuery、JSON和Ajax是Web开发中常见的技术栈,它们共同为构建动态、交互式的用户界面提供了强大的支持。下面将详细解释这些技术及其在登录示例中的应用。 Struts2是一个基于MVC(Model-View-Controller)...

    struts2+ajax+easyui+json+datagrid增删改查

    Struts2、Ajax、EasyUI、JSON 和 DataGrid 是现代Web开发中常用的技术组合,用于构建功能丰富的交互式用户界面。下面将详细解释这些技术及其在实现增删改查、分页和排序功能中的作用。 **Struts2** 是一个基于MVC...

    struts json ajax action 结合

    Struts、JSON与AJAX是Web开发中的三个关键概念,它们在构建动态、交互式的Web应用程序时发挥着重要作用。这篇文章将深入探讨这三个技术如何结合使用,以提高用户体验和服务器性能。 Struts是一个基于MVC(Model-...

    JQuery发送Ajax请求Struts2,并返回JSON的例子

    在Web开发中,jQuery、Struts2、Ajax和JSON是常见的技术组合,它们协同工作以实现动态、异步的数据交互。本示例将探讨如何利用jQuery的Ajax功能向Struts2框架发送请求,并以JSON格式接收响应数据。下面我们将详细...

    Struts+Jquery+Ajax+Json应用实例

    Struts、jQuery、Ajax以及JSON是Web开发中的四个关键技术,它们在构建动态、交互式的Web应用程序中发挥着重要作用。下面将分别介绍这些技术的核心概念及其在实际应用中的结合使用。 **Struts框架**:Struts是Apache...

    Struts 2项目 ajax动态生成树形菜单

    总结起来,"Struts 2项目 ajax动态生成树形菜单"是一个结合了Struts2框架、AJAX技术和数据库操作的实践案例,它展示了如何通过前后端交互动态构建Web界面,提高了用户体验。在实际开发中,这样的设计模式可以应用于...

    struts2+json+ajax

    Struts2、JSON和Ajax是Web开发中的三个关键技术,它们共同构建了动态、交互式的用户界面,提高了用户体验。本文将详细解析这三个技术及其在实际应用中的整合。 **Struts2** 是一个开源的MVC(Model-View-Controller...

    Struts2+Ajax实现的用户登录

    总结来说,"Struts2+Ajax实现的用户登录"是一个典型的Web开发场景,涉及到了前端的动态交互、后端的业务处理和持久化操作。Struts2提供了控制流程,Ajax实现了无刷新的用户交互,Sprint协助管理应用程序组件,而...

    Struts 2及AJAX框架的详细介绍

    4. **Struts 2与AJAX的集成**:介绍如何在Struts 2应用中使用AJAX,可能包括XMLHttpRequest对象、JSON数据格式、以及Struts2-AJAX插件的使用。 5. **实战示例**:提供了一些实际的开发案例,如创建一个简单的Struts ...

    ajax+struts2.0+jsp下拉列表级联

    通过研究这些文件,你可以深入理解如何将AJAX、Struts2和JSP结合,实现动态交互的Web应用。 总结来说,"ajax+struts2.0+jsp下拉列表级联"展示了如何利用现代Web技术提升用户体验。AJAX提供了无刷新的交互,Struts2...

    struts2+json+jquery实现ajax数据的存取

    "Struts2+JSON+jQuery实现Ajax数据的存取"就是一个典型的示例,它结合了强大的MVC框架Struts2、轻量级的数据交换格式JSON以及高效的前端库jQuery,以实现网页上的无刷新数据交互。下面将详细介绍这三个技术及其在...

    Struts2+Jquery+ajax+Json代码案例

    Struts2、jQuery、Ajax 和 JSON 是Web开发中常见的技术栈,它们共同作用于构建动态、交互式的Web应用程序。在“Struts2 Jquery ajax Json实现的一个完整案例”中,这些技术结合使用,以提高用户体验并优化服务器通信...

    联动(struts2+json+jquey)

    在IT行业中,构建动态、交互性强的Web应用是常见的需求,而"联动(struts2+json+jquey)"就是一种实现这种需求的技术组合。这里我们将深入探讨Struts2、JSON和jQuery这三者如何协同工作,以及如何通过它们实现联动效果...

    struts2 json例子 可执行

    综上所述,"struts2 json例子 可执行"意味着提供了一个可以运行的示例,展示了如何在Struts2框架下配置和使用JSON,包括Action的配置、Model驱动、JSON数据的发送和接收,以及可能涉及到的前端JQuery和Ajax交互。...

    struts2+jquery执行ajax并返回json类型数据(源码)

    在这个"struts2+jquery执行ajax并返回json类型数据"的示例中,我们将探讨如何通过Ajax技术在后台Struts2框架与前端jQuery库之间交换JSON格式的数据。 首先,Struts2是一个强大的MVC(Model-View-Controller)框架,...

    extjs 跟 struts+json

    - 使用Struts 2的JSON插件,使Action能够返回JSON格式的数据。 3. **JSON数据交换**: - JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 - 在...

Global site tag (gtag.js) - Google Analytics