我正在尝试在JSF 1.2(Mojarra)中构建一个组件树,其中树由多种类型的结点和叶节点组成。每个叶节点都需要以独特的方式进行渲染,并且需要使用潜在的更改进行回发。目的是允许用户更新每个叶节点表示操作的处理逻辑,例如“值等于”或“值不等于”。
例如:
Root
|
+- InternalNode1 (type I_A)
| |
| +- LeafNode1 (type L_A)
| |
| +- LeafNode2 (type L_B)
|
+- InternalNode2 (type I_B)
|
+- LeafNode3 (type L_B)
|
+- LeafNode4 (type L_A)
每种类型的叶节点需要以不同的方式呈现,具体取决于该节点类型的需要。此外,树可以修改,可以使用Javascript添加或删除节点,并将更新发布回服务器等。例如,在上面的树中,可以删除LeafNode4,或者将其类型更改为L_B。
JSF组件是否可以实现这一点?尝试使用多态UI组件,我是否采取了错误的方式?
答案 0 :(得分:2)
您可能需要查看<rich:tree>
。
答案 1 :(得分:1)
可以通过编程方式构建组件树,但这对于您的用例来说是错误的方法。允许用户代理操纵这种服务器端代码通常是不安全的。
最好使用模型来管理树结构(基本上是approach Don Roby is suggesting。)然后,可以像对待任何其他用户输入一样验证构成此模型的数据,以确保攻击者不会试图将服务器端数据置于无效状态。
JSF的声明性方法使得开箱即用(您可以看到原始树渲染示例here具有挑战性。)如果您不想拖入第三方库(或编写自己的库)您可能最好处理JavaScript中的所有树UI并使用JSF隐藏字段将其传输到服务器或从服务器传输。