`
yourenyouyu2008
  • 浏览: 286078 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

最简单的richfaces tree使用方式

    博客分类:
  • seam
阅读更多

richfaces tree提供的示例都是一次全部构造出树,对于节点很多的树来说希望是按需获取,switchType="ajax"只是组件树按需构造,不是树节点按需构造的,需要对TreeNodeImpl的实现进行扩展才能实现树节点的按需构造。

 

 功能特点:

1)业务代码不需要实现TreeNode,只需提供获取业务对象列表方法 loadChild()或 loadAllChild(),方法名是任意的。

2)提供了一次构造树和ajax方式构造树两种方式。

3)提供了树的选择功能。

 

核心代码在seamBasic.jar包中(内附源码),只需将该包放入classpath即可使用。

 

以下是树的使用方式。

 

欢迎交流讨论,qq:351956368

页面

<h:form> 
  <h:selectBooleanCheckbox value="#{tree1.treeChecked}">
   <a4j:support event="onclick" action="#{tree1.clickChecked(tree1.root)}" reRender="treeid" />
  </h:selectBooleanCheckbox>全选
  <rich:tree id="treeid" value="#{tree1.root}" var="var"  treeNodeVar="node"
       adviseNodeOpened="#{tree1.adviseAllNodeSelected}" switchType="ajax">
     <rich:treeNode>
     <h:selectBooleanCheckbox value="#{tree1.checkedNodes[var]}">
      <a4j:support event="onclick" action="#{tree1.clickChecked(node)}" reRender="treeid" />
     </h:selectBooleanCheckbox>
     <h:outputText  value="#{var.name}"/>
     </rich:treeNode>
   </rich:tree>
  #{tree1.allChecked.size()}tree1.allChecked获取全部选中的节点
  <br/>
  <h:commandButton />
 </h:form>

在类中使用树对象

@Name("ClassA")

class ClassA{

 

@In TreeComponent tree1;

//获取选中的树节点

public List getAllChecked(){

return tree1.getAllChecked();

}

 

组件定义

<!-- 一次全部构造出树-->

 <component class="seam.basic.richface.tree.TreeComponent" name="tree1" scope="conversation">
  <property name="loadAllNodesFlag">true</property>
  <property name="loadAllMethod">#{tableDAO.loadAllChild}</property>
 </component>
<!-- 按需构造-->
 <component class="seam.basic.richface.tree.TreeComponent" name="tree1" scope="conversation">
  <property name="loadChildMethod">#{tableDAO.loadChild}</property>
 </component>

 

scope可以是任何一种,都能获得同样的效果,但数据查询不同,even作用域每个页面操作都要重新查询,page、conversation、session、application都只需查询一次数据。

数据获取

如果业务对象没有实现TreeNodeIdentifier接口,就要对取得的list进行封装,使得业务对象变成TreeNodeIdentifier。

可以使用代理模式包装业务对象成TreeNodeIdentifier。

@Name("tableDAO")
public class TableDAO {
 @In private EntityManager em;

//按需载入子节点,会被多次调用
 public List<Table1> loadChild(){
  TreeNodeIdentifier node=(TreeNodeIdentifier) Contexts.getEventContext().get(TreeComponent.TreeNodeIdentifierVar);//已由框架在之前设置进去。
  List<Table1> lt;
  if(node==null){//载入顶层节点
   lt=em.createQuery(
              "select t from TableNode t where t.pid=0")
              .getResultList();
   
  }else{//载入指定节点下的子节点
   lt=em.createQuery(
            "select t from TableNode t where t.pid=:pid").setParameter("pid", node.getTreeNodeId())
            .getResultList();
   
  }
  return lt;
 }

 

//获取全部树节点,只被调用一次
 @SuppressWarnings("unchecked")
 public List<TableNode> loadAllChild(){
  //还需要告知这些节点的跟节点是什么
  TableNode top=new TableNode("0","","");//根节点是“0”
  List<TableNode> lt=em.createQuery("select t from TableNode t").getResultList();
  lt.add(0, top);
  return lt;
 }

}

实体对象

节点上绑定的业务对象,需要实现TreeNodeIdentifier接口。

如果不能实现TreeNodeIdentifier接口就要在数据获取层(上面的dao里)封装成TreeNodeIdentifier对象。

@Entity(name="TableNode")
public class TableNode implements TreeNodeIdentifier, Serializable{

 @Id
 @Column
 private String id;
 @Column
 private String pid;
 @Column
 private String name;
 @Column
 private String path;

。。。。。

 @Override
 public Serializable getTreeNodeId() {
  return id;
 }
 @Override
 public Serializable[] treeNodePath() {
  return null;//一般情况下不需要
 }
 @Override
 public Serializable getTreeNodePid() {
  return pid;
 }

  • 大小: 16 KB
分享到:
评论

相关推荐

    richfaces tree权限树

    而`richfaces_tree.txt`可能是代码示例、使用指南或者相关说明文档,它可能包含了如何在项目中集成和配置这个组件的详细步骤,以及如何根据需求调整和扩展其功能。 在使用RichFaces的Tree组件时,开发者通常需要做...

    使用richfaces 实现tree

    本教程将聚焦于如何使用RichFaces实现一个动态的树形视图。 首先,我们需要确保开发环境已经配置了以下组件: 1. JDK 1.5:这是运行JSF和RichFaces的基础,确保已安装并设置好`JAVA_HOME`环境变量。 2. JSF 1.2.*:...

    JSF2和RICHFACES4使用指南

    JSF2和RICHFACES4使用指南

    Richfaces组件使用指南

    这只是Richfaces组件使用的一个简单例子,实际上,Richfaces提供了大量组件,如数据表、对话框、日期选择器、树形结构等,可以极大地丰富你的Web应用的交互性和视觉效果。使用这些组件,开发者可以创建出具有高度...

    richfaces-ui-3.2.1

    这使得开发者在使用RichFaces时能够充分利用JBoss的特性,如安全、事务管理等。 在文件名称列表中,我们看到只有一个"lib"目录。这通常包含所有必要的JAR文件,用于构建和运行RichFaces 3.2.1的应用。这些库包含了...

    Richfaces组件使用指南.doc

    本指南将指导您如何使用 RichFaces 组件构建一个简单的 JSF 应用程序。 下载和安装 RichFaces 组件 首先,需要下载最新的 RichFaces 组件。RichFaces 组件位于 JBoss 项目中,可以从 JBoss 官方网站下载。下载完成...

    richfaces tree 例子

    按照richfaceslivedemo中的例子 改成节点存储在数据库中 把数据库生成好 添加数据 就可以用了 数据库脚本:if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[node]') and OBJECTPROPERTY(id,...

    RichFacesDemo(Hello)最简单的案例

    刚刚学习richfaces,按照 user guide 上第三章的教程,总是实现不了预期效果,总是停留在tomcat错误页面上,思来想去web.xml和faces-config.xml都按照要求配置了,为何不对呢? google那么了长时间,总算提炼出一个...

    richfaces tree 案例

    @Out(required=false,scope=SESSION) private TreeNode rootNode = null; private List&lt;String&gt; selectedNodeChildren = new ArrayList(); private String nodeTitle; private static final String DATA_PATH...

    使用richfaces需要用到的jar包

    使用richfaces需要用到的jar包! commons-beanutils-1.7.0.jar,commons-codec-1.3.jar,commons-collections-3.2.jar,commons-digester-1.8.jar,commons-discovery-0.4.jar,commons-el-1.0.jar,commons-...

    richfaces参考文档

    1. **AJAX 支持**:RichFaces 使用 A4J (Ajax for Java) 技术,允许开发者通过简单的声明式或编程方式实现页面局部更新,减少页面重载,提升响应速度。 2. **组件库**:包括各种富组件,如数据表(DataTable)、...

    用richFaces的<rich:treeNode>标签开发tree

    以下是一个简单的示例代码片段,展示了如何使用`&lt;rich:treeNode&gt;`: ```xml &lt;rich:tree id="myTree"&gt; &lt;!-- 这里可以添加更多的属性和事件处理 --&gt; &lt;/rich:tree&gt; ``` 在这个例子中,`treeBean`是后台...

    Richfaces 常用组件使用手册中文版

    《Richfaces 常用组件使用手册中文版》是一份专为中文读者准备的指南,它详细介绍了如何在Web开发中使用Richfaces组件。Richfaces是一个基于JSF(JavaServer Faces)的框架,提供了丰富的组件库以支持丰富的用户界面...

    RichFaces 3.3 帮助文档(英文)

    - **Apache MyFaces:** 介绍如何在使用Apache MyFaces的环境中部署和使用RichFaces。 - **Facelets支持:** 讲解了如何在RichFaces中启用和利用Facelets模板引擎。 - **JBoss Seam支持:** 针对与JBoss Seam框架的...

Global site tag (gtag.js) - Google Analytics