已编辑的问题...
你好,
我想从支持bean加载我的复合组件的.xhtml文件,并将其动态添加到页面中。 .xhtml文件的名称来自一个变量。
例如:
public MyBean (){
String componentFile = "myCompositeComponent.xhtml"
public String addComponentToPage(){
//how do that?...
return null;
}
}
谢谢!
这是不可能。复合组件是基于模板的,只能在视图中使用。最好的选择是完全重复您最初在模型的复合组件中编写的JSF代码。最好是创建一个完整的@FacesComponent
类,该类扩展@FacesComponent
和UIComponent
。没错,这是一个繁琐且不透明的工作,但是通过这种方式,您将最终获得一个组件,该组件可以通过一条代码行在视图和模型中均可重用。
-ugly-替代方法是将所有可能的组件放置在视图中并使用UIComponent
属性。
@FacesRenderer
如果需要,可以将其包装在Facelets标记文件中,以便可以隐藏起来并在多个位置重复使用。
我不明白为什么要从支持bean中添加复合组件。我想您想在发生事件时使它动态可见,但是为此存在AJAX reRender。
例如,您可以执行以下操作:
@FacesRenderer
rendered
属性存储一个<my:component1 rendered="#{bean.myComponentType == 'component1'}" />
<my:component2 rendered="#{bean.myComponentType == 'component2'}" />
<my:component3 rendered="#{bean.myComponentType == 'component3'}" />
...
值。您可以切换该值,然后使用来重新渲染<h:panelGroup id="composite" rendered="#{myBean.renderComponent}">
<my:compositecomponent/>
</h:panelGroup>
。 Richfaces的renderComponent
。
希望有所帮助,丹尼尔