一个dwr+spring+hibernate的示例
关键字: spring, hibernate这是一个运用dwr+spring+hibernate这样一个框架编写的示例。它展示了一下内容:
1、在dwr中尝试编写的一些通用的代码,包括如何编写一个通用的列表显示框并实现分页、如何编写一个通用的单行编辑框、如何编辑一个通用的存盘和删除程序等等。
2、在dwr中如何与spring兼容,调用bus中的方法;在dwr中如何与hibernate兼容,在页面端操作值对象,以及处理值对象间的各种关系。
3、如何在spring中实现单dao,使这个单dao既可以与hibernate隔离,使其低耦合高内聚,提高可维护性,又能满足各个bus的业务需要,简化开发的过程。
不是美工,界面比较外行,见谅了:)
示例在MyEclipse中安装部署的步骤:
1、创建一个新的web项目并拷贝示例中的文件到项目中。注意web.xml文件应当是将原文件覆盖。
2、添加spring和hibernate。点击项目树中的项目名按Alt+Enter键,弹出项目属性对话框。选择“Java Build Path”中的“Libraries”标签,然后点击“Add Library”按钮,选择“MyEclipse Libraries”,点击“Next”,选择“Hibernate 3.0 Core Libraries”、“Spring 1.2 AOP Libraries”、“Spring 1.2 Core Libraries”、“Spring 1.2 ORM/DAO/Hibernate Libraries”、“Spring 1.2 Web Libraries”,点击“Finish”按钮。
3、点击“Add External JARs”按钮,添加dwr.jar、daosupport.jar、hxtg.jar、hibernate3(必须将hibernate3升级到3.2以上)以及其它数据库相关的jar包到项目中。添加完成以后记得重新部署应用服务器。
4、创建数据库实例,如果是oracle,在pl/sql中运行示例中的employee.sql创建数据库对象。
5、修改ApplicationContext-hibernate.xml中datasource的连接属性为你的数据库。部署完成!
部署完成后运行可能会在部分功能中出错。这些问题的解决我会在《DWR帮助说明-dwr的bug及其解决方法》中详细讨论。
重要提示:部署完成以后需要打开Department.hbm.xml和Employee.hbm.xml,修改schema="TEST"为你自己的用户名。
相关文档:
评论
在emplpyee.jsp的edit()里加一段调试函数:alertValue(vo);看看传过来的vo中是否有sex属性
不过我添加了21个部门都还没分页
没找到分页设置的地方哦
还有,holly-x.gif图标貌似显示隐藏用的。
但没效果啊
抱歉,有个小小的BUS所以分页失效,在/WebRoot/department/index.jsp中47行,把if(condition){condition=iniCondition;}改为if(!condition){condition=iniCondition;}就可以了。员工列表是正确的,你也可以参照它。
这里我添加了个默认设置iniCondition,它的定义在../hxtg/public/dwr/util.js中。如果要为每个页面单独设置,可以这样写:
if(!condition){condition={properties:[],operators:[],values:[],page:1,size:12};}
其它都照写,把size改为你需要的每页行数就可以了
还有问题哦,condition=iniCondition应该是condition=iniConditions吧,
还有
员工页面老提示'sex'为空或不是对象的,但数据库表sex字段是有值的
我也正在用这写技术做项目...
谢过
不过我添加了21个部门都还没分页
没找到分页设置的地方哦
还有,holly-x.gif图标貌似显示隐藏用的。
但没效果啊
抱歉,有个小小的BUS所以分页失效,在/WebRoot/department/index.jsp中47行,把if(condition){condition=iniConditions;}改为if(!condition){condition=iniConditions;}就可以了。员工列表是正确的,你也可以参照它。
这里我添加了个默认设置iniConditions,它的定义在../hxtg/public/dwr/util.js中。如果要为每个页面单独设置,可以这样写:
if(!condition){condition={properties:[],operators:[],values:[],page:1,size:12};}
其它都照写,把size改为你需要的每页行数就可以了
不过我添加了21个部门都还没分页
没找到分页设置的地方哦
还有,holly-x.gif图标貌似显示隐藏用的。
但没效果啊
然后我在web.xml中配置了OpenSessionInViewFilter,虽然不会抛出异常了。但是我无法get设置了延迟加载的属性,返回的都是null。
一些朋友说,在return POJO之前,先把需要的属性添加到集合中或者使用Hibernate.initliz。但是这些解决方案都不够灵活,您有更好的方法吗?
如果有描述不清楚的地方还请见谅,麻烦您了。
你的问题可能是:hibernate的延迟加载只能在应用服务器端有效,但dwr往往要到浏览器端才会去读取值对象的属性,因此再也不可能延迟加载了。我认为解决这个问题的办法就是提前加载,也就是在应用服务器端加载,因为作为开发人员肯定知道随后的程序需要读取哪些属性。因此,我在daoSupport.jar中提供了一个方案,你可以看看com.htxx.service.dao.PreloadProps,具体的使用见我的示例中EmployeeBusImp中的这一段:
public ResultSet findEmployee(Condition condition) {
return new PreloadProps(this.getDao().query(Employee.class, condition),
new PreloadProxy(){
public Object[] PreloadProperty(Object vo) {
Employee emp = (Employee)vo;
return new Object[]{emp.getDepartment()};
}}
);
}
这个示例是在jdk1.4下编写的,但一些朋友告诉我他们在jdk1.5下也可以运行。不知道你是什么问题,可以把错误信息挑关键的发上来。
package org.chaos.dwr;
import java.util.ArrayList;
import java.util.List;
public class UserManager {
private List<User> users = new ArrayList<User>();
public void add(final User user){
synchronized(this){
users.add(user);
}
}
public List<User> getAll(){
synchronized(this){
return users;
}
}
}
public class User {
private String id;
private String name;
private String title;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
<allow>
<create javascript="jsmanager" creator="new" scope="application">
<param name="class" value="org.chaos.dwr.UserManager"></param>
</create>
<convert match="org.chaos.dwr.User" converter="bean"></convert>
</allow>
</dwr>
<?xml version="1.0" encoding="UTF-8"?>
<html>
<head>
<style>
.usersTable {
background: #FFFFFF;
border-collapse: collapse;
}
.usersTable th {
background: #DDDDDD;
border: 1px solid #FFFFFF;
}
.usersTable td {
border: 1px solid #FFFFFF;
}
.usersTable tr {
background: #FFBBBB;
border: 1px solid #FFFFFF;
}
</style>
<script type='text/javascript' src='/DWR2.0/dwr/interface/jsmanager.js'></script>
<script type='text/javascript' src='/DWR2.0/dwr/engine.js'></script>
<script type='text/javascript' src='/DWR2.0/dwr/util.js'></script>
<script type='text/javascript'>
window.onload = function() {
jsmanager.getAll(fillTable);
}
function addUser() {
var user = { id:"", name:"", title:"" };
DWRUtil.getValues(user);
jsmanager.add(user);
jsmanager.getAll(fillTable);
}
var cellFuncs = [
function(data) { return data.id; },
function(data) { return data.name; },
function(data) { return data.title; }
];
function fillTable(users) {
DWRUtil.removeAllRows("usersBody");
DWRUtil.addRows("usersBody", users, cellFuncs);
}
</script>
</head>
<body>
<h3>Edit User</h3>
<table class="usersTable">
<thead>
<tr>
<th>id</th>
<th>Name</th>
<th>Title</th>
</tr>
</thead>
<tbody id="usersBody" />
</table>
<br />
<table>
<tbody>
<tr>
<td>Id:</td>
<td><input id="id" type="text" size="30" /></td>
</tr>
<tr>
<td>Name:</td>
<td><input id="name" type="text" size="30" /></td>
</tr>
<tr>
<td>Title:</td>
<td><input id="title" type="text" size="30" /></td>
</tr>
<tr>
<td><input type="button" value="add" onclick="addUser()" /></td>
</tr>
</tbody>
</table>
</body>
</html>
采用dwr配合spring这种框架,dwr可以直接调用spring中的bean,因此它与以前框架的一个巨大的不同就是不需要service层,也就是说dwr帮我们把service层完成了,我们完全不用写任何代码。
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 86977 次
- 性别:


- 详细资料
搜索本博客
我的相册
共 4 张
最近加入圈子
最新评论
-
再析在spring框架中解决多 ...
楼主这个用来动态切换数据库是可以的,如果是这样一个场景那:用户登录后,会显示一个 ...
-- by javachs -
一个dwr+spring+hibernate ...
正在整理dwr的东西,有时间与lz交流
-- by lengyue -
再析在spring框架中解决多 ...
楼主你的这个解决方案可以说是动态的切换数据源而已!
-- by jayxu -
一个dwr+spring+hibernate ...
shim 写道员工页面老提示'sex'为空或不是对象的,但数据库表sex字段是有 ...
-- by fangang -
一个dwr+spring+hibernate ...
fangang 写道shim 写道谢谢分享,学习一下 不过我添加了21个部门都还 ...
-- by shim






评论排行榜