网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Java版本和C++版本简单Stack程序.
.java中的字节码.
.深入研究Servlet线程安全性问题.
.JAVA:Filter编码器.
.Wireless Messaging API(4).
.Spring框架快速入门之简介.
.《Java编程思想》(第二版)第7章:.
.构造方法的初始化顺序.
.[JAVA100例]033、读写文件(字节).
.2005 Java中国开发者大会现场报道.
.Java有用论.
.Java桌面应用程序设计:SWT.
.再论弹出窗口.
.java&xml心得(三).
.Sun对Java语言安全性与功能做出重.
.对等计算实践:P2P遇上SSL.
.JBuilder常见疑难问题解答.
.Java环境的搭建.
.浅谈JAVA VM 发展.
.Maven vs Ant.

深入讨论JSF中Tree2组件使用方法

发表日期:2008-1-5


 Tree2组件使用Html表格将你的数据呈现为一个树。这个树是动态的:当用户点击它们时它们可以展开或者折叠。该组件同时支持客户端和服务端的交互方式,在客户端交互时使用了javascript。在随后的例子中,每次用户的点击将产生一个Request / Response 周期,并在新的视图状态(View State)中重新呈现新的树结构。

  注:在后面的例子中只有可见的(已经展开的节点)数据被传送到客户端。而在第一个例子(客户端Tree),在每个HTML Response中,整个树都被发送到客户端浏览器。树的每个节点都包含了不少的HTML代码(假定每个节点200个字符,这个大小将取决于你希望在节点上显示的信息的量),这些信息将被传送到浏览器,其中包括了那些不可见的节点(没有展开的节点),因为它们的一个祖系节点被展开。假如你有一个深度有四层的树,平均每个结点拥有四个子结点,这时候你就需要传输10 + 102 + 103 + 104 = 11 110个节点,每个节点有200个字符,这个树总共就有2 222 000个字符,也就是2M的数据。这个例子将向用户说明,虽然纯客户端Tree会给客户端带来更好的用户体验,但随之而来的带宽问题迅速的增长。纯客户端的树适用于小型的树,或者在Intranet及宽带连接中使用的中型大小的树。对于大型的树,或者你需要照顾到一些低带宽的用户的需要时,你就需要使用服务端树。你可以通过的clientSideToggle这个属性来选择你使用的是客户端的树或者服务端的树,<t:tree2>的clientSideToggle这个属性来选择你使用的是客户端的树或者服务端的树,<t:tree2 clientSideToggle="false" ...>将会使用服务端的树,属性值设为true将会使用客户端的树,默认值为true。

  Backing Bean:

  Tree2组件对Backing Bean中的一个TreeModel进行操作。通常情况,你只要把这个TreeModel绑定到这个组件上就可以了,就像这样:

<t:tree2 value="#{myHandler.treeModel}"
  下面需要建立一个类MyHandler,在faces-config.xml中的managed bean配置成myHandler,在例子中这个类提供了一个方法getTreeModel()用于返回一个TreeModel用于表示你的数据。

public class MyHandler {
 public TreeModel getTreeModel() {
  ......
 }
}
  TreeModel实际上是对TreeNode实例进行了一些简单的包装。

  TreeNode是一个接口,其中和tree2相关有四个方法:

String getType()
boolean isLeaf()
List getChildren()
int getChildCount()
  其它方法都没有什么用处了,可能会在今后的版本中取消。它们要求开发者在开发backing bean中做一些并不必要的操作。

  int getChildCount() 方法返回这个节点的子结点数量,这个方法了很轻易的采用如下的方式实现:

public final int getChildCount() {
return getChildren().size();
}
  该方法的出现使得对于子结点的延迟加载变的可行。该方法的实现只需要返回该节点的子结点数量,而不需要返回每个子结点的实例。

  boolean isLeaf() 方法在该节点没有子节点的时候返回true。这样,一个很直截了当的实现可以这样:

public final boolean isLeaf() {
return getChildren().isEmpty();
}
  不管你提供了什么样的实现,在任何时间任何情况下你都得保持getChildren().isEmpty() ==> isLeaf()。isLeaf()方法实际上控制了节点被怎样呈现:是否被当做树叶节点(不能被继续展开)。

  String getType() 方法决定了用怎样的方式来呈现这个节点。在 JSF 页面中,可以在 <t:tree2> 的Tag 中嵌套facet,JSF将会选出与 getType() 方法返回值同名的 facet 用于呈现。假如该节点没有找到相符的 facet,将会导致一个错误,并且这个方法不会返回null。

  List getChildren() 方法返回一个 List,其中包含了该节点下所有的 TreeNode,这就表示这些节点将被呈现为该节点下的子结点。该 List 不能包含 null,假如该 List 的大小和getChildCount()不符,将会报错。子结点将按照它们在 List 中的顺序呈现出来。

  改变Tree中的内容

  (当展开树的节点时,在后台延迟加载)

  在邮件列表中有很多关于这项任务的问题和讨论,我(Marcel,一个 JSF 的初学者)在这里总结一下。假如你有更好的解决方案,请更新这些文字。

  在这里存在的一个问题就是我要这样把“+”图标去掉:

  · <t:tree2 ... showNav="false" ...>
 
  然后再让文件夹图标(代表包含子节点的节点)变的可点击:

  · <h:commandLink action="#{t.toggleEXPanded}" actionListener="#{navigationBacker.processAction}">

上一篇:Java基础:JVM(Java 虚拟机)的详细讲解 人气:625
下一篇:Generic Data Access Objects 设计模式 人气:670
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐