您的位置:首页 > 编程语言 > Java开发

SpringMVC+DWR + Hibernate + 菜单树

2013-11-19 14:51 253 查看
Sort.java

Java代码

package com.tree.entity;

import java.util.HashSet;

import java.util.Set;

publicclass Sort {

privateint id;

private String name;//类别的名字

private Sort parent;//父节点

private Set<Sort> childrens;//子节点

//geter.seter.....

}

Sort.hbm.xml:

Java代码

<?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
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

*/

publicclass SortDaoImpl extends HibernateDaoSupport implements SortDaoInf {

/**

* 添加数据

* @param 需要添加的实例

*/

publicvoid 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() {

returnthis.getHibernateTemplate().findByNamedQuery("findAllParent");

}

/**

* 通过父节点id找到其子节点实例

* @param id 父节点id

*/

@SuppressWarnings("unchecked")

public List findChildByParentId(int id) {

//使用findByNamedQuery(“相应的配置文件中你对应要使用查询语句的名字”)

returnthis.getHibernateTemplate().findByNamedQuery("findChildByParent", id);

}

}

首先是web.xml文件中如下:

Java代码

<!--

//配置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中)的文件配置:
Java代码

<?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的配置
Java代码

<?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>
Java代码

<%@ 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的代码如下:
Java代码

//在页面启动的时候操作

window. {

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";

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: