在运行时从辅助bean添加JSF 2复合组件

时间:2010-11-01 18:40:58

标签: jsf runtime loading composite-component

编辑问题......

您好,

我想从支持bean加载我的复合组件的.xhtml文件,并将其动态添加到页面中。 .xhtml文件的名称来自变量。

例:

public MyBean (){

    String componentFile = "myCompositeComponent.xhtml"

    public String addComponentToPage(){

          //how do that?...

          return null;
    }

} 

谢谢!

2 个答案:

答案 0 :(得分:5)

可能。复合组件是基于模板的,只能在视图中使用。您最好的选择是重复您最初在模型中的复合组件中编写的JSF代码。更好的方法是创建一个完整的@FacesComponent类,扩展UIComponent,并加上@FacesRenderer。确实,这是一项繁琐且不透明的工作,但是这样你最终会得到一个可以在一个代码行中在视图和模型中重复使用的组件。

另一种选择是将所有可能的组件放在视图中并使用rendered属性。

<my:component1 rendered="#{bean.myComponentType == 'component1'}" />
<my:component2 rendered="#{bean.myComponentType == 'component2'}" />
<my:component3 rendered="#{bean.myComponentType == 'component3'}" />
...

如果有必要,可以在Facelets标签文件中包装它,以便可以将其隐藏起来并在多个地方重复使用。

答案 1 :(得分:0)

我不明白为什么要从辅助bean添加复合组件。我想你想让它在事件发生的情况下动态显示,但是为了那个有AJAX reRender。

例如,您可以执行以下操作:

<h:panelGroup id="composite" rendered="#{myBean.renderComponent}">
    <my:compositecomponent/>
</h:panelGroup>

renderComponent属性存储boolean值。您可以将该值与reRender composite切换为例如Richfaces的<a4j:commandLink>

希望有所帮助,丹尼尔