- 浏览: 286078 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (121)
- jsf (16)
- 技术 (1)
- seam (27)
- jpa/hibernate (6)
- seam-对话 (3)
- 复用组件 (1)
- java基础 (18)
- JBOSS (1)
- Facelets (3)
- EL表达式 (2)
- 正则表达式 (1)
- sogi (2)
- 工具 (2)
- 设计模式/重构 (2)
- 项目管理-maven (5)
- EJB (1)
- ClassLoader (2)
- eclipse (1)
- jQuery (0)
- seam2源码分析 (0)
- osgi (0)
- TEST (0)
- 日志记录 (1)
- 批处理工作流 (0)
- 业务需求 (0)
- 语言 (2)
- 架构 (2)
- svn (1)
- sql (1)
- 异常处理 (1)
- mybatis (2)
- http (2)
- 代码可读性 (3)
- 配置化 (0)
- 错误恢复 (0)
- 状态查询 (1)
- 误操作恢复 (0)
- 工作安排 (0)
- 自动化 (0)
- 解耦 (1)
- 交流 (1)
- spring (6)
- 代码质量 (2)
- 方案 (1)
- 分布式 (1)
- mvc (2)
最新评论
-
luchuanbaker:
经过测试,实际上,mybatis并没有此问题,我也碰到了这样的 ...
mybatis 异常不友好 举例 -
huang882088:
jboss的war发布到tomcat里报这个错误怎么办?
classloader常见问题总结 -
yourenyouyu2008:
大型,可持续扩展的系统适合使用静态语言。大型系统中的部分地方可 ...
Nuxeo公司探秘:从Python迁移到Java -
yourenyouyu2008:
既然Nuxeo同时使用了Pytho ...
Nuxeo公司探秘:从Python迁移到Java -
panshunchang:
还有一种可能,真的缺这个jar包,在tomcat lib目录下 ...
classloader常见问题总结
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;
}
发表评论
-
spring seam比较
2014-01-14 14:06 9491)获取框架中的bean spring通过静态方法中传递 ... -
Nuxeo公司探秘:从Python迁移到Java
2013-07-21 10:57 1079成立于2000年的Nuxeo公 ... -
自定义组件问题
2013-03-01 10:14 01)ios:dataTable组件中不加buttonPane ... -
seam中内嵌的事务回滚拦截器RollbackInterceptor
2012-12-28 15:17 2114seam中有两种事务管理方 ... -
使用JTA的事务同步机制实现分布式事务j的功能avax.transaction.Synchronization
2012-12-05 18:43 0分布式事务强大功能,但也会带来性能和管理上的压力(这是听专家门 ... -
seam中的test
2012-04-25 11:25 0seam中提供了一些非seam环境下的unit testing ... -
Hibernate的FlushMode 和seam对话中的FlushMode
2012-02-21 17:29 0hibernate提供了5种flushmode。 1) NE ... -
seam 中的注释分类
2012-02-14 11:08 0seam中注释主要分为2大类,seam组件对象构造阶段的注释和 ... -
seam2 热部署
2011-09-30 10:25 1198seam能很好地支持 页面(faceslet)、非ejb cl ... -
使用长对话的"manual" flush-mode ,多操作一次提交
2011-03-24 10:27 1541一次长对话访问中可以包括多个页面,每个页面只处理部分数据,但不 ... -
seam 属性配置与installed="false"的冲突
2011-03-08 15:09 1119问题 在测试和运行环境使用不同的事务配置,默认不需要指定事务 ... -
page scope介绍及用途
2010-06-02 00:13 6293jsf1.2只提供了3中作用域,application、ses ... -
seam框架中@Unwrap的使用示例
2009-09-07 10:07 16551) 把FacesContext当seam组件使用,可以直接 ... -
基于seam技术的中文网站
2009-09-05 16:28 1356基于seam的中文网站,欢迎大家提供实际的seam项目 ht ... -
在seam项目启动后执行数据库操作
2009-07-15 15:33 1788项目启动时执行些初始化数据操作,问题是事务不能提交,这样虽然方 ... -
基于seam-gen的热部署(hot deploy)相关问题
2009-07-06 12:04 1490使用seam-gen生成的seam项目是支持热部署的。 ... -
提升jsf/seam性能
2009-05-23 22:07 1439转载:http://www.jsfcentral.com/ar ... -
根据组件名字获取组件对象Component.getInstance(String name)
2009-05-05 22:02 4038Component.getInstance(String ... -
components.xml 配置seam组件
2009-04-29 12:21 2414components.xml 的配置采用反射机制来实现,组件类 ... -
下拉框的国际化
2009-04-22 17:32 2106<f:selectItem itemLabel=&quo ...
相关推荐
而`richfaces_tree.txt`可能是代码示例、使用指南或者相关说明文档,它可能包含了如何在项目中集成和配置这个组件的详细步骤,以及如何根据需求调整和扩展其功能。 在使用RichFaces的Tree组件时,开发者通常需要做...
本教程将聚焦于如何使用RichFaces实现一个动态的树形视图。 首先,我们需要确保开发环境已经配置了以下组件: 1. JDK 1.5:这是运行JSF和RichFaces的基础,确保已安装并设置好`JAVA_HOME`环境变量。 2. JSF 1.2.*:...
JSF2和RICHFACES4使用指南
这只是Richfaces组件使用的一个简单例子,实际上,Richfaces提供了大量组件,如数据表、对话框、日期选择器、树形结构等,可以极大地丰富你的Web应用的交互性和视觉效果。使用这些组件,开发者可以创建出具有高度...
这使得开发者在使用RichFaces时能够充分利用JBoss的特性,如安全、事务管理等。 在文件名称列表中,我们看到只有一个"lib"目录。这通常包含所有必要的JAR文件,用于构建和运行RichFaces 3.2.1的应用。这些库包含了...
本指南将指导您如何使用 RichFaces 组件构建一个简单的 JSF 应用程序。 下载和安装 RichFaces 组件 首先,需要下载最新的 RichFaces 组件。RichFaces 组件位于 JBoss 项目中,可以从 JBoss 官方网站下载。下载完成...
按照richfaceslivedemo中的例子 改成节点存储在数据库中 把数据库生成好 添加数据 就可以用了 数据库脚本:if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[node]') and OBJECTPROPERTY(id,...
刚刚学习richfaces,按照 user guide 上第三章的教程,总是实现不了预期效果,总是停留在tomcat错误页面上,思来想去web.xml和faces-config.xml都按照要求配置了,为何不对呢? google那么了长时间,总算提炼出一个...
@Out(required=false,scope=SESSION) private TreeNode rootNode = null; private List<String> selectedNodeChildren = new ArrayList(); private String nodeTitle; private static final String DATA_PATH...
使用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-...
1. **AJAX 支持**:RichFaces 使用 A4J (Ajax for Java) 技术,允许开发者通过简单的声明式或编程方式实现页面局部更新,减少页面重载,提升响应速度。 2. **组件库**:包括各种富组件,如数据表(DataTable)、...
以下是一个简单的示例代码片段,展示了如何使用`<rich:treeNode>`: ```xml <rich:tree id="myTree"> <!-- 这里可以添加更多的属性和事件处理 --> </rich:tree> ``` 在这个例子中,`treeBean`是后台...
《Richfaces 常用组件使用手册中文版》是一份专为中文读者准备的指南,它详细介绍了如何在Web开发中使用Richfaces组件。Richfaces是一个基于JSF(JavaServer Faces)的框架,提供了丰富的组件库以支持丰富的用户界面...
- **Apache MyFaces:** 介绍如何在使用Apache MyFaces的环境中部署和使用RichFaces。 - **Facelets支持:** 讲解了如何在RichFaces中启用和利用Facelets模板引擎。 - **JBoss Seam支持:** 针对与JBoss Seam框架的...