`

spring和dwr整合(一个树的小例子)

阅读更多
又好一段时间没写博客了..在这里写一个dwr和spring.hibernate整合树型显示的小例子;
首先开发环境是eclipse.这里需要hibernate3.2和spring2.5,dwr2.0.5,dbcp1.2.2的jar包(这些都是在相应的官方网站下载)
这里我选择的场景是从数据库中读取到一个自己链接的类别显示表sort
下面是其实体类和相应的配置文件代码:
Sort.java
package com.tree.entity;

import java.util.HashSet;
import java.util.Set;

public class Sort {
private int id;
private String name;//类别的名字
private Sort parent;//父节点
private Set<Sort> childrens;//子节点
//geter.seter.....
}

Sort.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping 
	package="com.tree.entity">
	<class name="Sort" table="tb_sort">
	<id name="id">
	<generator class="native"></generator>
	</id>
	<property name="name"></property>
	<many-to-one name="parent" column="sid"/>
	<set name="childrens">
	<key>
	<column name="sid"></column>
	</key>
	<one-to-many class="Sort"/>
	</set>
	</class>
<!-- 
//这里使用了Hibernate的命名查询.
//将你的每个实现映射实例对应的表操作语句都统一写到此处..方便统一管理
//命名查询也可以使用2级缓冲.方便优化Hibernate的数据库操作
 -->
	<query name="findAllParent">
	<![CDATA[
	from Sort sort where sort.parent=null
	]]></query>
	<query name="findChildByParent">
	<![CDATA[
	from Sort sort where sort.parent.id=?
	]]></query>
</hibernate-mapping>

看了2个相应的映射实例.我们看看如何完成dao
SortDaoImpl.java
package com.tree.dao;

import java.util.List;

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

import com.tree.entity.Sort;
/**
 * 这里与Spring的整合.使用了Spring提供的HibernateDaoSupport
 * 因为该类提供了getHibernateTemplate()的方法可以获取到HibernateTemplate
 * @author chenjj
 */
public class SortDaoImpl extends HibernateDaoSupport implements SortDaoInf {
	/**
	 * 添加数据
	 *  @param 需要添加的实例
	 */
	public void save(Sort sort) {
		this.getHibernateTemplate().save(sort);
	}
	/**
	 * 通过id查找Sort类实例
	 *  @param 类型id
	 */
	public Sort find(int id) {
		return (Sort) this.getHibernateTemplate().get(Sort.class, id);
	}
	/**
	 * 查询所以父节点实例
	 * 
	 */
	@SuppressWarnings("unchecked")
	public List findAllParent() {
		return this.getHibernateTemplate().findByNamedQuery("findAllParent");
	}
	/**
	 * 通过父节点id找到其子节点实例
	 * @param id 父节点id
	 */
	@SuppressWarnings("unchecked")
	public List findChildByParentId(int id) {
//使用findByNamedQuery(“相应的配置文件中你对应要使用查询语句的名字”)
		return this.getHibernateTemplate().findByNamedQuery("findChildByParent", id);
	}
	
}

HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是HibernateTemplate的常用方法简介:

q      void delete(Object entity):删除指定持久化实例

q      deleteAll(Collection entities):删除集合内全部持久化类实例

q      find(String queryString):根据HQL查询字符串来返回实例集合

q      findByNamedQuery(String queryName):根据命名查询返回实例集合

q      get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例

q      save(Object entity):保存新的实例

q      saveOrUpdate(Object entity):根据实例状态,选择保存或者更新

q      update(Object entity):更新实例的状态,要求entity是持久状态

q      setMaxResults(int maxResults):设置分页的大小

上面对应一些基本的操作解析
下面是配置文件的配置:
首先是web.xml文件中如下:
 <!--
//配置DWR拦截器
-->   
 <servlet>   
  <servlet-name>dwr-invoker</servlet-name>   
  <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>   
  <init-param>   
   <param-name>debug</param-name>   
   <param-value>true</param-value>   
  </init-param>   
 </servlet>   
 <servlet-mapping>   
  <servlet-name>dwr-invoker</servlet-name>   
  <url-pattern>/dwr/*</url-pattern>   
 </servlet-mapping>
 <!-- 
//这里你需要告诉服务器你的spring的配置放到什么地方.这里我选择是在src文件夹下面
 -->
   <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

 <!-- 
//定义 Spring 的上下文监听器,它会负责初始化 ApplicationContext(spring的环境)
-->
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

dwr.xml(存放在WEB-INF中)的文件配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">

<dwr>

  <allow>
  <!--
  	//这里create表示创建的对象方式以及生成的js文件的名字
	//javascript:表示生成的js文件的名字;
	//creator:表示创建的方式;
	//<param>表示要创建具体的类
	//name="class"这是一个类;
	//value="[编写具体的类名]";
  // 因为整合spring.这里creator的属性设置为spring.
   -->
  <create javascript="sortDaoInf" creator="spring">
  <!-- 
  //param元素的name属性值可以是class,beanName等,此处用beanName,
  //value得值是定义在applicationContext.xml中某个bean的id值。
   -->
 	<param name="beanName" value="DWRSortDaoInf"></param>
  </create>
  <!--  
	//convert:配置具体的javabean;
	//match:具体的java类名;
	//converter:表示使用的方式;
	//bean ==> 符合javabean规范的形式进行创建;
	//date ==> 专门用于转换util.Date和sql.Date
		
   -->
  <convert match="com.tree.entity.Sort" converter="bean">
  <param name="include" value="id,name"></param>
  </convert>
  </allow>	
</dwr>

applicationContext.xml的配置
<?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.5.xsd">
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql://127.0.0.1:3306/gao"/>
		<property name="username" value="root"/>
		<property name="password" value="root"/>
	</bean>
	<!-- 定义HibernateSessionFacotry -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<!-- 使用指定的数据源 -->
		<property name="dataSource" ref="dataSource"/>
		<!-- 指定需要映射的实体 -->
		<property name="mappingResources">
		<list>
		<value>com/tree/entity/Sort.hbm.xml</value>
		</list>
		</property>
		<property name="hibernateProperties">
			<value>
				hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect
				hibernate.cache.provider_class = org.hibernate.cache.NoCacheProvider
				hibernate.format_sql = true
				hibernate.show_sql = true
				hibernate.hbm2ddl.auto = update
			</value>
		</property>
	</bean>
<!--
//这里DWRSortDaoInf要与dwr中creater的beanName的value相一致
-->
	<bean id="DWRSortDaoInf" class="com.tree.dao.SortDaoImpl">
	<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
</beans>

完成这些后台的配置与必要的操作定义后..
就可以实现页面树的显示
页面为tree.jsp:因为大部分的操作都使用了tree.js上面.而通过访问http://127.0.0.1:8080/tree(我的项目名称)/dwr可以获取到dwr生成后转化成的js
  <script type='text/javascript' src='/tree/dwr/interface/sortDaoInf.js'></script>
  <script type='text/javascript' src='/tree/dwr/engine.js'></script>
  <script type='text/javascript' src='/tree/dwr/util.js'></script>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="ISO-8859-1"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <script type='text/javascript' src='/tree/dwr/interface/sortDaoInf.js'></script>
  <script type='text/javascript' src='/tree/dwr/engine.js'></script>
  <script type='text/javascript' src='/tree/dwr/util.js'></script>
  <script type="text/javascript" src="js/tree.js"></script>
<title>Insert title here</title>
</head>
<body>
<div id="tree">
</div>
</body>
</html>

核心的tree.js的代码如下:
//在页面启动的时候操作
window.onload=function() {
	var tree = document.getElementById("tree");
	
	sortDaoInf.findAllParent(function(sorts){//获取到所有的父元素
		for(var i=0;i<sorts.length;i++) {
			var sort = sorts[i];
			var my_ul = document.createElement("ul");
			my_ul.innerHTML="<li id="+sort.name+"><img id="+sort.id+" src='img/plus.gif' onclick='getSubtree(\""+sort.name+"\","+sort.id+")'/><img src='img/folder.gif'/></li>";
			tree.appendChild(my_ul);
		}
	});
}

	function getSubtree(){
//传递的参数可以使用arguments[index..]来获取.javascript一个扩展特点
			   var name = arguments[0];//获取第一个参数的值
			   var id = arguments[1];//获取第二个参数的值
				var element = document.getElementById(name);
				var my_ul = document.createElement("ul");//创建一个ul的元素
				sortDaoInf.findChildByParentId(id,function (sorts){//使用sortDaoInf的方法.id为传递的参数.sorts为回调函数.
					var str="";
					for(var i=0;i<sorts.length;i++) {
						var sort = sorts[i];
						str+="<li id="+sort.id+">"+sort.name+"</li>";//将获取到的数据用li形式表示
					}
				my_ul.innerHTML = str;//将获取到所以li元素添加到相应的ul中
				element.appendChild(my_ul);

				//把"+"号变成"-"号
				var img = document.getElementById(id);
				img.setAttribute("src","img/minus.gif");
				
				img.onclick = function () {
									showHide(name,id,element);
								 }; 
				});	
			}

			function showHide(){
				var name = arguments[0];//获取第一个参数的值
			   var id = arguments[1];//获取第二个参数的值
			   var root = arguments[2];//获取第三个参数的值
				var element = document.getElementById(name);
				var img = document.getElementById(id);//获取到相应的Img元素
				img.src = "img/plus.gif";
				img.onclick = function(){
									getSubtree(name,id);
								}
				var subs = element.lastChild;
				root.removeChild(subs);//将父元素中子元素删除掉
				//subs.style.display="none";
			}

通过上面的例子使我更清楚的了解的dwr的作用.和spring的强大.为了实现树的显示也对javascript的编写有了进一步了解..在后面还会搞些更好的东西和结合学习到所有技术在学习同时与大家分享一下
下面是所以的源码..jar太大就不上传了.
分享到:
评论

相关推荐

    DWR与SPRING,DWR与STRUTS2的整合

    提供的文档“dwr与spring.doc”和“dwr与struts2.doc”可能详细阐述了整合过程和最佳实践,而“一个小例子.txt”可能包含了一个实际整合示例,帮助读者更好地理解整合步骤和实现方式。学习并掌握这些知识对于提升...

    spring整合dwr

    在整合Spring和Direct Web Remoting (DWR)框架时,主要目的是实现在Web应用程序中创建一个可交互的、实时的用户界面,通过Ajax技术在客户端和服务器之间进行数据交换。以下将详细介绍整合过程中的关键步骤。 1. **...

    springMVC整合dwr完整例子

    SpringMVC和Direct Web Remoting (DWR) 的整合是一个常见的技术实践,它允许Web应用程序实现富客户端交互,提供近乎实时的动态数据更新。在这个完整的例子中,我们将深入探讨这两个框架如何协同工作,以及如何设置和...

    dwr+spring实例

    要将DWR与Spring整合,我们通常会使用Spring的`DwrController`或者自定义一个Spring MVC控制器来处理DWR请求。此外,我们还需要在Spring的配置文件中声明DWR的相关bean,如`DwrConfig`,并将其与其他Spring服务(如...

    dwr与spring整合的相关资料收集 包括一个例子 dwr-comet

    这个资料集合应该包含了关于如何集成DWR和Spring的详细教程,以及一个实际的例子,可以帮助开发者理解并掌握这种整合方式。通过深入学习和实践,你可以创建出具有强大交互性、响应速度快的Web应用。

    dwr+springJdbc例子

    总结来说,"dwr+springJdbc例子"展示了如何利用DWR实现实时的前后端交互,Spring提供依赖注入和数据访问抽象,而JDBC则负责与数据库的底层通信。这样的组合使得开发高效、灵活且易于维护的Web应用成为可能。理解并...

    DWR结合spring例子(可用)

    DWR (Direct Web Remoting) 是一个开源的Java库,它允许Web应用程序在浏览器和服务器之间进行实时的、异步的通信,使得JavaScript能够直接调用服务器端的Java方法,就像是在同一个应用中操作一样。Spring框架则是一...

    Spring+ibatis+Dhtmlx+dwr一个简单的例子

    这个“Spring+ibatis+Dhtmlx+dwr一个简单的例子”提供了使用这些技术进行集成的实例,这对于初学者来说是一份宝贵的参考资料。下面将详细解释这些技术及其在项目中的作用。 1. **Spring**:Spring 是一个开源的Java...

    spring3.0和dwr30整合的例子

    用spring3的showcase整合dwr30的 还有mvc和rest哦 说明请看:http://hi.baidu.com/wmhx/blog/item/bde6f2f925213046242df271.html Csdn还不能发文 %&gt;_&lt;%

    Spring2结合DWR2的用户注册的例子

    org.directwebremoting.spring.DwrSpringServlet是一个专门为整合Spring提供的一个servlet,加入这个类后,DWR的配置可以写入到Spring的配置文件applicationContext.xml中,省掉了dwr.xml文件。 在添加监听器后,...

    DWR+SPRING 例子+DWR中文教材

    DWR (Direct Web Remoting) 是一个开源JavaScript库,它允许Web应用程序在客户端与服务器端之间进行实时的、异步的通信,极大地提升了Web应用的交互性和用户体验。DWR通过AJAX技术实现在浏览器和Java服务器之间直接...

    integrating Spring and DWR

    博客文章可能会提供一个具体的例子,例如如何创建一个简单的Spring MVC控制器,然后使用DWR使其能够被浏览器中的JavaScript直接调用。文件列表中的"java-ext"可能包含了实现这些功能的Java代码或者扩展类。 总的来...

    ssh2+dwr开发的一个小例子(里边包含了所有的配置文件说明)

    SSH2 (Struts2 + Spring + ...通过学习和研究这个例子,开发者可以了解如何将这些技术整合在一起,实现一个功能完善的Web应用。同时,配置文件的详细说明有助于理解每个组件的工作原理,对初学者来说是宝贵的实践资源。

    struts+spring+hibernate+dwr+分页例子

    Struts、Spring、Hibernate 和 Direct Web Remoting (DWR) 是Java开发中常见的四大框架,它们各自在Web应用的不同层面发挥作用。在这个“struts+spring+hibernate+dwr+分页例子”中,我们将深入探讨这四个框架的集成...

    Ext+dwr+spring做的例子程序

    【标题】"Ext+dwr+spring做的例子程序"是一个整合了三个关键技术的示例应用,主要展示了如何在Java Web开发中结合使用EXTJS(Ext)前端框架、Direct Web Remoting (DWR) 和Spring框架。这三个技术在现代企业级应用...

    dwr整合ssh综合实例

    在DWR整合中,Spring用于管理DWR的bean,确保在需要时可以注入到其他服务或控制器中。 **3. Hibernate** Hibernate是Java领域的一款流行ORM框架,它允许开发者通过Java对象来操作数据库,减少了SQL的直接编写。在...

    DWR+hibernate+spring未完成例子

    【标题】:“DWR+Hibernate+Spring未完成例子”揭示了这个压缩包中包含的是一个未完成的示例项目,该示例项目整合了Direct Web Remoting (DWR)、Hibernate ORM框架和Spring框架。这三者都是Java Web开发中的重要组件...

Global site tag (gtag.js) - Google Analytics