- 浏览: 400020 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
qiuqinjun:
你好,项目的文献能否打包学习下呢
java定时任务管理实现 -
panghaoyu:
实现一个智能提示功能需要ajax、数据库、jsp/php、算法 ...
使用jQuery Autocomplete(自动完成)插件 -
CommonAccount:
我的showModalDialog() 传对象参数,在子窗口用 ...
JS中showModalDialog (模态窗口)详细使用 -
wyfn18:
very good
使用jQuery Autocomplete(自动完成)插件 -
jiangqingtian:
xiexie
使用jQuery Autocomplete(自动完成)插件
关于在Struts2中结合json使用ajax进行动态无刷新查询某个列表并在前段显示,这里不是简单的刷新页面的某个属性,而是列表,即对应action中查询出ArrayList转换成json数据在前段通过js处理后来替换页面中某个容器的内容。
对于Struts2与json的基本配置将不在这里记录。下面将通过代码进行一一阐述,其中的关键类JsonUtil是早些时候获得于网络,已忘记原文地址,在此感谢前辈。
struts_member.xml 内容
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <package name="user" extends="json-default" namespace="/user">
- <action name="qryOrder" class="productAction" method="qryOrder">
- <interceptor-ref name="params"/>
- <result type="json"></result>
- </action>
- </package>
- </struts>
其中json-default已经extends struts_base.xml
applicationContext.xml 申明action和service
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- .
- .
- .
- .
- .
- .
- <!-- Services -->
- <bean id="orderService" parent="transactionProxy">
- <property name="target">
- <ref bean="orderTarget"/>
- </property>
- </bean>
- <bean id="productAction" class="com.app.web.actions.ProductAction" singleton="false">
- <property name="orderService">
- <ref bean="orderService"/>
- </property>
- </bean>
- </beans>
ProductAction 内容
- package com.app.web.actions;
- import java.util.ArrayList;
- import java.util.List;
- import org.apache.log4j.Logger;
- import org.apache.struts2.ServletActionContext;
- import com.googlecode.jsonplugin.annotations.JSON;
- import com.netshop.comm.Constant;
- import com.netshop.comm.JsonUtil;
- import com.netshop.comm.lucene.ArticleSearchUtil;
- import com.netshop.model.member.MemberService;
- import com.netshop.model.order.IOrderService;
- import com.netshop.model.order.Order;
- import com.netshop.model.product.IProductService;
- import com.netshop.web.baseaction.AbstractAction;
- public class ProductAction extends AbstractAction{
- static Logger log = Logger.getLogger(ProductAction.class);
- private IOrderService orderService;
- private List<Order> orderList;
- private int proId;
- private String jsonResult;
- /**
- * 查询订单列表
- * @return
- * @throws Exception
- */
- public String qryOrder() throws Exception{
- try{
- //查询
- StringBuffer sql = new StringBuffer("SELECT m.email,m.level,o.proNum,o.orderTime FROM Order AS o ,Member AS m WHERE o.productId=");
- sql.append(proId).append(" AND o.status=").append(Constant.WAIT_BUYER_GOTO_PAY).append(" AND o.memberId=m.id");
- ArrayList list = (ArrayList) orderService.find(sql.toString());
- //对查询结果进行处理
- if(list!=null && list.size()>0){
- orderList = new ArrayList<Order>();
- for(int i=0;i<list.size();i++){
- Object obj[] = (Object[])list.get(i);
- if(obj!=null && obj.length==4){
- //将查询结果存入order
- Order order = new Order();
- order.setMemberEmail((String)obj[0]);
- order.setMemberLevel(((Integer)obj[1]).intValue());
- order.setProNum((Integer)obj[2]);
- order.setOrderTime((java.util.Date)obj[3]);
- //将order实例存入list
- orderList.add(order);
- }
- }
- }
- //orderList借用工具类转化成json类型的串
- jsonResult = JsonUtil.listToJson(orderList);
- //申明返回的结果,不然页面上不能显示
- ServletActionContext.getResponse().setContentType("text/xml");
- }catch(Exception e){
- log.info("qryOrder Exception="+e.getMessage());
- e.fillInStackTrace();
- }
- return SUCCESS;
- }
- @JSON(serialize = false)
- public IOrderService getOrderService() {
- return orderService;
- }
- public void setOrderService(IOrderService orderService) {
- this.orderService = orderService;
- }
- public List<Order> getOrderList() {
- return orderList;
- }
- public void setOrderList(List<Order> orderList) {
- this.orderList = orderList;
- }
- public int getProId() {
- return proId;
- }
- public void setProId(int proId) {
- this.proId = proId;
- }
- public String getJsonResult() {
- return jsonResult;
- }
- public void setJsonResult(String jsonResult) {
- this.jsonResult = jsonResult;
Order 类
里面对应的相关属性以及setter,getter方法,将不在说明
JsonUtil 类代码如下:
- package com.app.comm;
- import java.beans.IntrospectionException;
- import java.beans.Introspector;
- import java.beans.PropertyDescriptor;
- import java.util.List;
- public class JsonUtil {
- /**
- * @param object
- * 任意对象
- * @return java.lang.String
- */
- public static String objectToJson(Object object) {
- StringBuilder json = new StringBuilder();
- if (object == null) {
- json.append("/"/"");
- } else if (object instanceof String || object instanceof Integer || object instanceof Double) {
- json.append("/"").append((String)object).append("/"");
- } else {
- json.append(beanToJson(object));
- }
- return json.toString();
- }
- /**
- * 功能描述:传入任意一个 javabean 对象生成一个指定规格的字符串
- *
- * @param bean
- * bean对象
- * @return String
- */
- public static String beanToJson(Object bean) {
- StringBuilder json = new StringBuilder();
- json.append("{");
- PropertyDescriptor[] props = null;
- try {
- props = Introspector.getBeanInfo(bean.getClass(), Object.class)
- .getPropertyDescriptors();
- } catch (IntrospectionException e) {
- }
- if (props != null) {
- for (int i = 0; i < props.length; i++) {
- try {
- String name = objectToJson(props[i].getName());
- String value = objectToJson(props[i].getReadMethod().invoke(bean));
- json.append(name);
- json.append(":");
- json.append(value);
- json.append(",");
- } catch (Exception e) {
- }
- }
- json.setCharAt(json.length() - 1, '}');
- } else {
- json.append("}");
- }
- return json.toString();
- }
- /**
- * 功能描述:通过传入一个列表对象,调用指定方法将列表中的数据生成一个JSON规格指定字符串
- *
- * @param list
- * 列表对象
- * @return java.lang.String
- */
- public static String listToJson(List<?> list) {
- StringBuilder json = new StringBuilder();
- json.append("[");
- if (list != null && list.size() > 0) {
- for (Object obj : list) {
- json.append(objectToJson(obj));
- json.append(",");
- }
- json.setCharAt(json.length() - 1, ']');
- } else {
- json.append("]");
- }
- System.out.println("----------"+json.toString());
- return json.toString();
- }
- }
页面JS部分 :
- //查询购物车中的商品
- function qryOrder(proId){
- $.ajax({
- type: "POST",
- url: "user/qryOrder.do?proId="+proId,
- data: "",
- datatype: "json",
- contentType: "application/json",
- success: function(jsonResult) {
- qryOrderCallBack(jsonResult);
- },
- error: function(msg) {
- location = "../error.jsp";
- //alert("操作失败,请重试"+msg)
- }
- });
- }
- //解析返回得json数据并给页面赋值
- function qryOrderCallBack(responseMsg){
- var data = eval("("+responseMsg+")");
- var order = eval(data.orderList);
- var result = "";
- if(order==null){
- alert('order is null');
- return;
- }
- result += "<thead>";
- result += "<tr class='thead'>";
- result += "<th scope='col' class='t1'>购买人</th>";
- result += "<th scope='col' class='t2'>会员级别</th>";
- result += "<th scope='col' class='t4'>数量</th>";
- result += "<th scope='col' class='t3'>购买时间</th>";
- result += "</tr>";
- result += "</thead>";
- result += "<tbody>";
- //这里的order[i]就相当于list中的order,起属性也是一一对应的
- for(var i=0;i<order.length;i++) {
- var num = order[i].num;
- if((i+1)%2==1){
- result += "<tr class=''>";
- }else if((i+1)%2==0){
- result += "<tr class='alt'>";
- }
- result += "<td>"+order[i].memberEmail+"***</td>";
- result += "<td>"+order[i].memberLevel+"</td>";
- result += "<td>"+order[i].proNum+"</td>";
- result += "<td class='lower tr'>"+order[i].orderTime+"</td>";
- result += "</tr>";
- }
- result += "</tbody>";
- $("#orderList").html(result);
- }
页面HTML部分
- <div id="buy-annal">
- <table class="buy-record" summary="客户购买记录" cellspacing="0" id='orderList'>
- </table>
- </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);
.......
}
发表评论
-
Ajax Session Timeout处理
2014-07-01 09:57 9321对于session过期跳转的问题,很简单,就是一个过滤器,然 ... -
20非常有用的Java程序片段
2014-01-13 21:54 0下面是20个非常有用的Java程序片段,希望能对你有用。 ... -
20个非常有用的Java程序片段
2014-01-13 21:49 0下面是20个非常有用的Java程序片段,希望能对你有用。 ... -
Spring MVC实现一个控制器写多个方法
2014-01-15 21:12 1972Spring MVC的API: DispatcherSe ... -
使用Eclipse构建Maven的SpringMVC项目
2013-06-21 12:53 1131使用Eclipse构建Maven的SpringMVC项目 ... -
发送Email的实现
2013-06-20 14:37 0package com.huawei.common.emai ... -
dbcp连接操优化
2013-06-02 12:35 0在做struts2、spring网站时,在系统闲置一段时间后, ... -
全局JavaScript禁用超链接对象
2013-05-15 23:44 0一般情况下,我们在设置禁用超链接的时候都是这样做的: &l ... -
判断IE浏览器是否支持JSON.parse
2013-05-10 17:43 0以下代码首先探测是否在 window 下存在 JSON 对象, ... -
spring的taskExecutor线程池实现邮件发送
2013-04-26 11:18 0由于项目里涉及到上万人邮件处理,需要用到线程池来提高处理速度 ... -
让IE旧版本浏览器也支持HTML5的特性
2013-04-24 21:39 3174让IE旧版本浏览器也支持HTML5的特性,可以通过IE支持 ... -
JS中showModalDialog (模态窗口)详细使用
2013-04-22 13:12 37930基本介绍: ... -
Java操作json的通用类
2013-04-18 11:05 8571提供一个Java中操作JSON格式的公共类: JS ... -
js判断是否为360浏览器
2013-03-09 14:49 2263自从3Q大战之后360浏览器的userAgen ... -
Java写的数据库连接池
2013-03-03 02:04 1362非常不错的手写的数据库连接池: import j ... -
一个非空校验的Java类
2012-11-28 21:41 0/* * 文件名:DataChecker.java * ... -
js中用正则表达式 过滤特殊字符 ,校验所有输入域是否含有特殊符号
2012-10-30 16:54 0https://cloud-nkgy1.huawei.com/ ... -
由12306.cn谈谈网站性能技术
2012-09-21 00:13 95812306.cn网站挂了,被 ... -
IFrame页面内target目标跳转到另一个iframe
2012-09-05 02:08 14652IFrame页面内target目标跳转到另一个iframe ... -
Hadoop(quick start)快速入门
2012-09-01 00:27 1528Hadoop(quick start)快速入门 ...
相关推荐
struts2+Hibernate+jquery+Ajax+Json+mysql例子 一个部门和员工信息管理的例子,页面上的所有数据全部采用动态加载,增删改查操用全部在一个页面上实现,没有页面跳转。前台页面和后台服务器交互采用json格试传输。 ...
8.1.1 页面上:如何使用自定义结果组件构建Struts 2 Ajax应用程序 171 8.1.2 实现JSON结果类型 173 8.2 常用的结果类型 180 8.2.1 RequestDispatcher,也叫做dispatcher 180 8.2.2 ServletRedirectResult,也叫做...
\contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...