在运行时从支持bean添加JSF 2复合组件

问题描述 投票:4回答:2

已编辑的问题...

你好,

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

例如:

public MyBean (){

    String componentFile = "myCompositeComponent.xhtml"

    public String addComponentToPage(){

          //how do that?...

          return null;
    }

} 

谢谢!

jsf runtime loading composite-component
2个回答
6
投票

这是不可能。复合组件是基于模板的,只能在视图中使用。最好的选择是完全重复您最初在模型的复合组件中编写的JSF代码。最好是创建一个完整的@FacesComponent类,该类扩展@FacesComponentUIComponent。没错,这是一个繁琐且不透明的工作,但是通过这种方式,您将最终获得一个组件,该组件可以通过一条代码行在视图和模型中均可重用。

-ugly-替代方法是将所有可能的组件放置在视图中并使用UIComponent属性。

@FacesRenderer

如果需要,可以将其包装在Facelets标记文件中,以便可以隐藏起来并在多个位置重复使用。


0
投票

我不明白为什么要从支持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

希望有所帮助,丹尼尔

© www.soinside.com 2019 - 2024. All rights reserved.