`
zisefeiniao
  • 浏览: 168115 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论
阅读更多

在Java开发中,如果要使用JSON进行开发,需要一些支持,这里使用JSON-lib进行处理。

在开发AJAX中,进入了Servlet或Action,需要将查询出的数据转换为JSON对象,再将JSON对象转换为字符串输出回页面

 

示例:联动菜单

(1)建立项目,

(2)加入SSH支持

(3)处理jar包

删除asm-2.2.3.jar、ehcache-1.1.jar,加入commons-pool.jar支持jar包

(4)配置struts与spring的插件支持

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

 

<struts-config>

       <data-sources />

       <form-beans>

       </form-beans>

 

       <global-exceptions />

       <global-forwards />

       <action-mappings>

       </action-mappings>

       <controller

              processorClass="org.springframework.web.struts.DelegatingRequestProcessor">

       </controller>

       <message-resources

              parameter="org.liky.json.struts.ApplicationResources" />

       <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

              <set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />

       </plug-in>

</struts-config>

 

(5)配置数据源及dbc

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

 

 

       <bean id="dataSource"

              class="org.apache.commons.dbcp.BasicDataSource">

              <property name="driverClassName"

                     value="org.gjt.mm.mysql.Driver">

              </property>

              <property name="url" value="jdbc:mysql://localhost:3306/ajax"></property>

              <property name="username" value="root"></property>

              <property name="password" value="mysqladmin"></property>

       </bean>

       <bean id="sessionFactory"

              class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

              <property name="dataSource">

                     <ref bean="dataSource"></ref>

              </property>

              <property name="hibernateProperties">

                     <props>

                            <prop key="hibernate.dialect">

                                   org.hibernate.dialect.MySQLDialect

                            </prop>

                            <prop key="hibernate.show_sql">true</prop>

                     </props>

              </property>

              <property name="mappingResources">

                     <list>

                            <value>org/liky/json/pojo/Areaplus.hbm.xml</value>

                            <value>org/liky/json/pojo/Area.hbm.xml</value>

                     </list>

              </property>

       </bean>

       <bean id="hibernateTemplate"

              class="org.springframework.orm.hibernate3.HibernateTemplate">

              <property name="sessionFactory">

                     <ref bean="sessionFactory"></ref>

              </property>

       </bean>

       <bean id="areadaoimpl" class="org.liky.json.dao.impl.AreaDAOImpl">

              <property name="hibernateTemplate">

                     <ref bean="hibernateTemplate"></ref>

              </property>

       </bean>

 

</beans>

 

(6)生成pojo映射

package org.liky.json.pojo;

 

 

 

public class Areaplus implements java.io.Serializable {

 

       // Fields

 

       private Integer id;

 

       private Area area;

 

       private String title;

 

       // Constructors

 

      

       public Areaplus() {

       }

 

      

       public Areaplus(Area area) {

              this.area = area;

       }

 

      

       public Areaplus(Area area, String title) {

              this.area = area;

              this.title = title;

       }

 

       // Property accessors

 

       public Integer getId() {

              return this.id;

       }

 

       public void setId(Integer id) {

              this.id = id;

       }

 

       public Area getArea() {

              return this.area;

       }

 

       public void setArea(Area area) {

              this.area = area;

       }

 

       public String getTitle() {

              return this.title;

       }

 

       public void setTitle(String title) {

              this.title = title;

       }

 

}

package org.liky.json.pojo;

 

import java.util.HashSet;

import java.util.Set;

 

 

 

public class Area implements java.io.Serializable {

 

       // Fields

 

       private Integer id;

 

       private String title;

 

       private Set areapluses = new HashSet(0);

 

       // Constructors

 

      

       public Area() {

       }

 

      

       public Area(String title) {

              this.title = title;

       }

 

      

       public Area(String title, Set areapluses) {

              this.title = title;

              this.areapluses = areapluses;

       }

 

       // Property accessors

 

       public Integer getId() {

              return this.id;

       }

 

       public void setId(Integer id) {

              this.id = id;

       }

 

       public String getTitle() {

              return this.title;

       }

 

       public void setTitle(String title) {

              this.title = title;

       }

 

       public Set getAreapluses() {

              return this.areapluses;

       }

 

       public void setAreapluses(Set areapluses) {

              this.areapluses = areapluses;

       }

 

}

 

(7)编写DAO和实现类

package org.liky.json.dao.impl;

 

import java.util.List;

 

import org.liky.json.dao.AreaplusDAO;

import org.liky.json.pojo.Areaplus;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

 

public class AreaplusDAOImpl extends HibernateDaoSupport implements AreaplusDAO {

 

    public List<Areaplus> findByUpid(int upid) throws Exception {

       // TODO Auto-generated method stub

       return this.getHibernateTemplate().find(

              "FROM Areaplus AS a WHERE a.area.id = ?", upid);

    }

 

}

 

package org.liky.json.dao.impl;

 

import java.util.List;

 

import org.liky.json.dao.AreaDAO;

import org.liky.json.pojo.Area;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

 

public class AreaDAOImpl extends HibernateDaoSupport implements AreaDAO {

 

    public List<Area> findAll() throws Exception {

       // TODO Auto-generated method stub

       return this.getHibernateTemplate().find("FROM Area");

    }

 

}

 

(8)把实现配置到applicationContext.xml中

    <bean id="hibernateTemplate"

       class="org.springframework.orm.hibernate3.HibernateTemplate">

       <property name="sessionFactory">

           <ref bean="sessionFactory"></ref>

       </property>

    </bean>

    <bean id="areadaoimpl" class="org.liky.json.dao.impl.AreaDAOImpl">

       <property name="hibernateTemplate">

           <ref bean="hibernateTemplate"></ref>

       </property>

    </bean>

    <bean id="areaplusdaoimpl" class="org.liky.json.dao.impl.AreaplusDAOImpl">

       <property name="hibernateTemplate">

           <ref bean="hibernateTemplate"></ref>

       </property>

    </bean>

 

 

(9)通过一个连接,进入级联菜单显示页面,需要先查询出所有一级栏目(省份信息)

 

    private AreaDAO areadao;

 

    private AreaplusDAO areaplusdao;

 

    public void setAreadao(AreaDAO areadao) {

       this.areadao = areadao;

    }

 

    public void setAreaplusdao(AreaplusDAO areaplusdao) {

       this.areaplusdao = areaplusdao;

    }

 

   

    public ActionForward list(ActionMapping mapping, ActionForm form,

           HttpServletRequest request, HttpServletResponse response) {

       AreaForm areaForm = (AreaForm) form;// TODO Auto-generated method stub

 

       try {

           List all = this.areadao.findAll();

           request.setAttribute("all", all);

       } catch (Exception e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

 

       return mapping.findForward("list");

    }

 

(10)将Action配置到spring管理中

 

    <bean name="/area" class="org.liky.json.struts.action.AreaAction">

       <property name="areadao">

           <ref bean="areadaoimpl"></ref>

       </property>

       <property name="areaplusdao">

           <ref bean="areaplusdaoimpl"></ref>

       </property>

    </bean>

 

 

列表显示一级栏目

 

<%@ page language="java" pageEncoding="GBK"%>

 

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>

<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>

 

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html:html lang="true">

<head>

    <html:base />

 

    <title>list.jsp</title>

 

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control" content="no-cache">

    <meta http-equiv="expires" content="0">

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

    <meta http-equiv="description" content="This is my page">

    <!--

    <link rel="stylesheet" type="text/css" href="styles.css">

    -->

 

</head>

 

<body>

    <center>

       省份信息:

       <select name="area">

           <option value="0">

              -请选择省份-

           </option>

           <logic:iterate id="area" name="all" scope="request">

              <option value="${area.id }">

                  ${area.title }

              </option>

           </logic:iterate>

       </select>

 

       城市信息:

       <select name="plus">

           <option value="0">

              -请选择城市-

           </option>

       </select>

    </center>

 

</body>

</html:html>

 

 

 

(11)编写调用的js方法

 

    <script type="text/javascript">

       var xmlHttp ;

      

       function createXmlHttp() {

           if (window.XmlHttpRequest) {

              xmlHttp = new XmlHttpRequest();

           } else {

              xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

           }

       }

      

       function showplus(upid) {

           createXmlHttp();

           xmlHttp.onreadystatechange = showplusCallback ;

           xmlHttp.open("POST","area.do?status=showplus&upid="+upid);

           xmlHttp.send(null);

       }

      

       function showplusCallback() {

      

       }

      

   

    </script>

 

(12)完成后台Action中的代码

由于需要用到Java对JSON的解析处理,因此为项目导入JSON支持jar包

 

 

    public ActionForward showplus(ActionMapping mapping, ActionForm form,

           HttpServletRequest request, HttpServletResponse response) {

       AreaForm areaForm = (AreaForm) form;// TODO Auto-generated method stub

 

       List all = null;

       try {

           all = this.areaplusdao.findByUpid(areaForm.getUpid());

       } catch (Exception e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

 

       // 将查询的数据处理成为JSON对象

       // 将JSON-lib的支持jar包导入到项目中

       if (all != null && all.size() > 0) {

           Iterator iter = all.iterator();

           // 定义一个JSON对象

           JSONObject root = new JSONObject();

 

           // 定义一个JSON数组,保存所有的Areaplus的数据

           JSONArray areapluses = new JSONArray();

 

           while (iter.hasNext()) {

              Areaplus a = (Areaplus) iter.next();

              // 定义数组中的对象

              JSONObject areaplus = new JSONObject();

              // 为JSON的areaplus加入属性

              areaplus.put("id", a.getId());

              areaplus.put("title", a.getTitle());

              // 将Object对象加入到数组中

              areapluses.add(areaplus);

           }

           // 将数组加入到root中

           root.put("areapluses", areapluses);

           // 定义PrintWriter对象,返回数据

           // 处理乱码

           response.setCharacterEncoding("GBK");

           try {

              PrintWriter out = response.getWriter();

              out.print(root.toString());

              out.close();

           } catch (IOException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

           }

 

       }

 

       return null;

 

 

(13)在回调函数中取得返回的数据,并转换为JSON对象,同时进行处理。

可以直接使用JSON提供的json.js中的方法,将一个标准JSON对象的字符串转换为一个js对象

 

    <script type="text/javascript" src="json.js"></script>

    <script type="text/javascript">

       var xmlHttp ;

      

       function createXmlHttp() {

           if (window.XmlHttpRequest) {

              xmlHttp = new XmlHttpRequest();

           } else {

              xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

           }

       }

      

       function showplus(upid) {

           createXmlHttp();

           xmlHttp.onreadystatechange = showplusCallback ;

           xmlHttp.open("POST","area.do?status=showplus&upid="+upid);

           xmlHttp.send(null);

       }

      

       function showplusCallback() {

           if (xmlHttp.readyState == 4) {

              // 接收数据

              var str = xmlHttp.responseText ;

              // 转换为对象

              var obj = str.parseJSON();

              // 先将下拉列表清空

              var select = document.getElementById("plus") ;

              select.options.length = 1 ;

              // 循环返回的areaplus数据

              for (var i = 0 ; i < obj.areapluses.length ;i ++) {

                  var areaplus = obj.areapluses[i];

                  // 建立option

                  var option = document.createElement("option");

                  // 设置value属性

                  option.setAttribute("value",areaplus.id);

                  // 设置显示内容

                  option.appendChild(document.createTextNode(areaplus.title));

                  // 设置下拉列表

                  select.appendChild(option);              

              }

             

           }

       }

      

   

    </script>

 

 

(14)启动测试后,发现导入commons-collections-2.1.1包中的类并不全,需要将单独下载的完全版的这个jar包替换到项目中

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics