这个东西做了也有一点时间了,主要涉及的有dwr,jquery,dhtmltree,以及打了点酱油的dom4j.做到一半才知道ext是干什么的,但是好像这第一个版本已经没有它的施展余地了,留到下一次好了。用到的东西比较散,除了对dwr看的比较多意外,其他的都只是两天左右看了看,只看了需要的部分,所以了解不是很深,所以只能简单的谈一谈感想。
1.数据库
数据库建的很简单,一共7张表,暂时只用到三张
2.关于dwr
dwr最大的好处是让有点繁琐的ajax变成了在javascript里面写java。但是由于页面前端和后台是异步的,当需要执行的函数比较复杂时,就需要同步一下,免得前端反应太“快”而没有取得dwr返回的数据:
dwr.util.setAsync(false);
//dwr语句
dwr.util.setAsync(true);
另外,dwr在执行过程中,如果在web-inf/lib下缺少某些类库的话,eclipse的控制台是不会报错的,页面前端也只是弹出一个error的提示框。今天在使用dom4j编写一个xml文件时就遇到这个问题,这个后面后提到。
3.jquery
jquery是个很强大的框架,也支持ajax,但是dwr在这方面更强大一点,不过,在对于页面的一些操作上,dwr的util工具就逊色很多了。w3school上的教程很详细,不过我也没有仔细看,一直是当成查询手册,想用什么就看什么。
我曾遇到过这个问题:
$(document).ready(function(){
function f1(){
}
});
function f2(){
}
在这里f1和f2中的方法是不能相互调用的,而且在页面的事件中,也就是onclick=""这里是不能调用f1的方法。假如要调用怎么办?jquery实际上对事件的支持很强大,对于事件的定义都可以在jquery中完成,而不需要在html页面里面做过多的编写,所以像f2这样的方法是完全不需要的。如下:
$("#[属性ID]").click(function(){
//事件方法
});
4.dom4j + dhtmlxtree = 好友列表的动态加载
从昨天晚上到今天早上一直都在做这个事情;
4.1 xml
dhtmlxtree树形组件的内容完全可以有xml文件直接加载得到
xml一般格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<tree id="0">
<item text="我的好友" id="list1" im0="" im1="" im2="">
<item text="SwineLP" id="friend10001" im0="" im1="" im2=""/>
</item>
</tree>
tree标签是必须的,id必须与
tree=new dhtmlXTreeObject("[div id]","200%","200%","treeid");
中的第四个参数treeid一致(我今天在这里就吃了亏,老是说我没有父节点什么的)
im0:若无子节点是的图片
im1:节点未打开时的图片
im2:节点打开时的图片
想关的标签属性还有很多。
4.2 基本流程
登陆成功 -- 数据库搜索好友数据 -- 整理成xml格式字符串 -- 通过dwr发送到页面 -- 通过tree.loadXMLString([xmlstring],[callback])实现列表的加载
这里就直接贴代码了
数据库读取:
/**
* 获得xxno用户的当前好友列表信息map
* @param xxno
* @return
*/
public static HashMap<String,ArrayList<User>> getFriends(String xxno){
HashMap<String,ArrayList<User>> friendList = new HashMap<String,ArrayList<User>>();
try{
Connection conn = ConnFactory.getConn();
//获得列表数据
String sql = "select seryname from series where userno = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, xxno);
ResultSet smrs = pstmt.executeQuery();
while(smrs.next()){
friendList.put(smrs.getString(1), null);
}
sql = "select s.seryname,f.xxno,f.remark,u.nickname,u.state from series as s,friends as f,user as u where s.seryid = f.seryid and f.xxno = u.xxno and s.userno = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, xxno);
ResultSet frs = pstmt.executeQuery();
while(frs.next()){
String seryname = frs.getString(1);
if( null == friendList.get(seryname)){
ArrayList<User> flist = new ArrayList<User>();
friendList.put(seryname, flist);
}
//打包好友信息,加入好友队列中
User user = new User();
user.setXxno(frs.getString(2));
user.setRemark(frs.getString(3));
user.setNickname(frs.getString(4));
user.setState(frs.getByte(5));
friendList.get(seryname).add(user);
}
return friendList;
}catch(Exception ef){
Diary.println(ef, "用户注册时:");
return null;
}
}
整理成xml格式字符串
public static String getFriendList(String xxno){
Document doc = DocumentHelper.createDocument();
HashMap<String,ArrayList<User>> friendList = UserDao.getFriends(xxno);
Set<String> series = friendList.keySet();
//将好友列表信息打包成xml格式文件
Element tree = doc.addElement("tree");
tree.addAttribute("id", "0");
int col = 0;//好友分类数
for(String seryname : series){
ArrayList<User> flist = friendList.get(seryname);
Element sery = tree.addElement("item");
sery.addAttribute("text", seryname);
sery.addAttribute("id", "list" + ++col);
sery.addAttribute("im0","serypic.jpg");
sery.addAttribute("im1","serypic.jpg");
sery.addAttribute("im2","serypic.jpg");
while(flist.size() > 0){
User user = flist.remove(0);
Element f = sery.addElement("item");
if(null == user.getRemark()){
f.addAttribute("text", user.getNickname());
}else{
f.addAttribute("text", user.getRemark() + "("+ user.getNickname() +")");
}
f.addAttribute("id", "friend" + user.getXxno());
f.addAttribute("im0", "head.jpg");
f.addAttribute("im1", "head.jpg");
f.addAttribute("im2", "head.jpg");
}
}
return doc.asXML();
}
这里本来用拼接字符串就能够得到的,但是还是借用了一下dom4j,哈哈,看起来爽一点。
然后是dwr层
public String getFriendsXML(String xxno){
return FriendsList.getFriendList(xxno);
}
最后就是在页面里面调用了
$(document).ready(function(){
//获得好友xml
var xxno = $("#xxno").html();
dwr.engine.setAsync(false);
var treexml = XXIMPage.getFriendsXML(xxno);
dwr.engine.setAsync(true);
var tree = new dhtmlXTreeObject("friendtree","100%","100%",0);
tree.setImagePath("images/");
tree.loadXMLString(treexml, function(){
alert("载入成功!");
});
tree.enableTreeLines(false);
tree.setImageArrays("plus","plus_ar.gif","plus_ar.gif","plus_ar.gif","plus_ar.gif");
tree.setImageArrays("minus","minus_ar.gif","minus_ar.gif","minus_ar.gif","minus_ar.gif");
tree.setStdImages("plus_ar.gif","minus_ar.gif","plus_ar.gif");
});
tree中的setImageArray()和setStdImages()的方法还有问题,ignore!!关键在于列表xml的载入
- 大小: 17.3 KB
分享到:
相关推荐
- **设计完成后**,学生需要撰写实训报告,总结开发过程中的遇到的问题、解决方法、以及个人对Java Web开发的理解和体会。 6. **设计内容** - **具体步骤**:报告详细阐述了每个设计任务的实施过程,包括Tomcat...
近年来,Web开发领域的新技术和新工具层出不穷,它们的出现极大地推动了Web开发技术的发展,其中jQuery的诞生在Web技术的发展进程中具有划时代的意义。 jQuery发布于2006年,它因为易于使用、功能强大、展现优雅、...
【计算机网络课程设计题目】是针对学生学习计算机网络知识的一项实践环节,旨在加深对网络编程、Web开发等概念的理解和应用。以下是对几个设计题目的详细解析: **第一类:基于套接字的网络编程设计** 1. **局域网...
总结来说,大一至大二的计算机学习是一个循序渐进的过程,从基础概念到编程语言,再到数据库管理和Web应用开发,每个阶段都有其独特的重要性。实践项目是巩固理论知识、提升技能的关键,而合适的开发工具则能激发...
在本次实践中,我们选择了一个实际的项目——开发一款基于Web的协同办公系统。该项目涵盖了前端界面设计、后端数据处理、数据库管理、用户认证与权限控制等多个方面。我们首先进行了需求分析,明确了系统的功能模块...
2. 掌握ASP动态网站设计与开发,熟练使用ODBC连接到WEB数据库。 3. 理解网站设计的艺术审美,包括色彩和文本布局的基本原则。 4. 了解JavaScript和VBScript的主要特性,特别是它们在网页设计中的交互性和动态性作用...
- 开发语言:选用Java作为开发语言,Java以其跨平台、安全性以及强大的网络计算能力,成为开发Web应用的理想选择。MyEclipse作为集成开发环境,提供了便利的开发和调试环境。 - 数据库:采用Microsoft Office ...
例如,当用户成功登录后,登录窗体会关闭,主聊天窗体(ChatForm)会被打开,此时登录信息需要传递到新的窗体以便后续使用。 6. **状态管理** - 为了模拟真实的QQ体验,需要管理用户的登录状态。这可能涉及到使用...
1、支持虚拟形象和无虚拟形象 2、支持家园商品本地图片及远程图片调用 3、支持家园商品定期更新 4、可以将用户设计的家园生成静态图片(需空间安装了asppainter组件),以后自己的家园图片可以到处贴了! 5、...
1、支持虚拟形象和无虚拟形象 <br>2、支持家园商品本地图片及远程图片调用 <br>3、支持家园商品定期更新 <br>4、可以将用户设计的家园生成静态图片(需空间安装了asppainter组件),以后自己的家园图片可以...
首先,我们要了解JavaScript,这是一种广泛用于Web开发的高级编程语言,尤其在前端开发中占据核心地位。然而,JavaScript不仅仅局限于浏览器环境,它也可以在Node.js平台上运行,这使得JavaScript成为构建服务器端...
通过分析这些代码,我们可以深入了解Web开发的早期实践,包括HTML、PHP和Perl等技术的应用,这些都是当时网页设计和服务器端脚本的主流工具。同时,它也展示了如何利用FTP、HTTP等协议来分发软件包,使用户能够方便...
1. **Kotlin语言**:Kotlin是一种现代、静态类型的编程语言,由JetBrains开发,被广泛用于Android应用开发,Web开发,以及服务器端开发。它的语法简洁明了,支持函数式和面向对象编程,具有空安全特性和类型安全的...