Java 可以在JSF中实现组件的动态树吗?

Java 可以在JSF中实现组件的动态树吗?,java,jsf,components,facelets,Java,Jsf,Components,Facelets,我试图在JSF1.2(Mojarra)中构建一个组件树,其中该树由多种类型的连接节点和叶节点组成。每个叶节点都需要以一种独特的方式进行渲染,并且需要使用潜在的更改进行回传。其目的是允许用户更新处理逻辑,其中每个叶节点表示一个操作,例如“值等于”或“值不等于” 例如: Root | +- InternalNode1 (type I_A) | | | +- LeafNode1 (type L_A) | | | +- LeafNode2 (type L_B) | +- InternalNode

我试图在JSF1.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组件是不是走错了路?

您可能想看看。

可以通过编程方式构建组件树,但这对于您的用例来说是错误的方法。允许用户代理操作这样的服务器端代码通常是不安全的

最好使用一个模型来管理您的树结构(本质上是树结构)。然后可以像任何其他用户输入一样验证构成此模型的数据,以确保攻击者不会试图将服务器端数据置于无效状态


如果您不想拖入第三方库(或编写自己的控件),JSF的声明性方法使得开箱即用(您可以看到一个粗糙的树渲染示例)很有挑战性您最好使用JavaScript处理所有树UI,并使用JSF隐藏字段将其传输到服务器或从服务器传输出去。

感谢您的回复。我对您提到的自定义
UIComponent
方法感兴趣,其中组件包含我的数据模型。我的问题是理解数据是如何在回邮时重新构建的。如果数据模型的叶节点包含可插入类(多态),每个类都有不同的输入/选择等,那么我是否需要组件的
decode
方法中的代码来解析该类并重新构建树?JavaScript/隐藏字段解决方案也很有趣。可以操纵JSON树并对其进行解析,从而摆脱整个组件的想法。@MGE-通常,您可以从请求参数映射中对
呈现程序中提交的数据进行解码。如果您想允许表单将数据发送回服务器,您可能仍然需要使用隐藏字段。您采取哪种方法在很大程度上取决于个人偏好-您是想要bean中的反序列化逻辑,还是
转换器
呈现器
?您希望
呈现程序
将树作为HTML发出,还是在JS中解析数据并在页面加载时重新创建?无论如何,您都必须或多或少地编写JavaScript。谢谢您的回复。根据我选择的路线,我可能会使用一些讨论过的概念。但是,在我的工作地点,使用RichFaces可能不是一个选项:-)