use*_*501 7 jsf primefaces jsf-2
我使用Primefaces 3.4.1和Oracle JSF 2.2实现的2.2.0-m05里程碑版本.我也使用Spring 3.1进行依赖注入和一些AOP.
我正在尝试使用Primefaces树组件来显示逻辑过滤器规则的组合(并允许用户在复合结构中的任何深度创建复合/叶节点).
复合滤波器示例:
((location ='cal')AND(描述包含'test'))OR(project ='someProject')
示例树标记:
<p:tree value="#{form.rootComponent}" var="filterComponent" animate="true">
<p:treeNode type="composite">
<!-- some composite specific components -->
</p:treeNode>
<p:treeNode type="leaf">
<!-- some leaf specific components -->
</p:treeNode>
</p:tree>
Run Code Online (Sandbox Code Playgroud)
虽然元素上的"value"属性接受根TreeNode(从托管bean中检索),但"var"属性指向当前树节点中存在的实际数据,而不是节点本身.我想要一种方法来标记或以编程方式访问当前树节点,而不是其包装数据.
如果我可以在标记中访问它,我可以将它作为方法参数传递给托管bean.如果在标记中无法访问它,我可以通过模型对象获得直接的编程访问吗?(可能是通过访问底层树模型?).
我知道你可以使用一个解析为底层DataModel而不是数据集合的表达式作为h:dataTable的"值",但我相信你只能将根节点本身与p:tree一起使用.
我可以在包装的数据对象中包含对树节点的引用,但是如果可能的话,我真的宁愿避免讨厌的循环引用.
在没有更好的替代方案的情况下,我尝试使用"binding"属性将p:tree元素直接绑定到托管bean中的Tree实例(Tree是p:tree的UIComponent类),这允许我访问通过getTreeNode()方法的当前节点,但考虑到托管bean和视图组件之间的生命周期不匹配,我宁愿避免这种情况.它不能完美地工作,我认为必须有一个更好,更简单的解决方案.
我也尝试使用jsf数据表 - 使用嵌套数据表来处理复合部分 - 但是考虑到在jsf标记中创建有条件递归结构的困难而决定它(我相信在视图构建时不评估"呈现"属性)所以很难避免无限递归).
为了澄清,我只对包含"var"引用的数据的当前树节点感兴趣,而不是用户当前选择的节点.
PF Lead刚刚在PF 5.1.10/5.2中为p:treeTable添加了一个名为"nodeVar"的新属性(如果包含p:tree则为dunno).此功能将允许保持实际的TreeNode而不是它的数据.因此,现在可以在节点本身上执行额外的方法调用,例如TreeNode.isLeaf().
小智 0
嗯,树组件中有一个名为“选择”的属性。您只需要提供对托管 bean 方法的引用。
例如,在您的 xhtml 中按以下方式定义属性:
选择=“#{myManagedBean.selectedNode}”
通过上述属性的定义,您必须在引用 org.primefaces.model.TreeNode 实例的托管 bean 中提供常用的 setter 和 getter 方法。
归档时间: |
|
查看次数: |
3587 次 |
最近记录: |