从托管Bean添加组件

时间:2013-03-18 12:47:03

标签: jsf jsf-2 primefaces

我需要从Backing Bean添加组件。我在Managed Bean中使用String,它将所有jsf组件都作为String.In UI我需要渲染为组件。 我的托管bean编码是

String htmlContent = "<h:inputText/>";

public String getHtmlContent()
{
   return this.htmlContent;
}

和XHTML编码是

<h:outputText value="#{managedBean.htmlContent}" escape = "false"/>

如果我在htmlContent中使用Html标签,如

String htmlContent = "<input type='text'/>;

My Logic将正常工作。如果我在该String中使用jsf标记,则JSF组件将按原样呈现。它不会呈现为Html。

我知道最后所有的Jsf标签都会被转换成html标签。 有没有办法处理除ui以外的jsf标签的动态呈现:composition和ui:include?

提前致谢..

1 个答案:

答案 0 :(得分:1)

我认为你的解决方案是一个坏主意。据我了解,您希望在支持bean中生成一部分视图。不要试图将您的模型/控制器与视图混合。而不是仅在<h:panelGroup/>中向您的视图添加数据并添加rendered标记,以便您可以控制是否呈现它。

我会这样做:

@ManagedBean
@ViewScoped
public class MyBackingBean {
    private boolean renderPieceOfView;
    // getter and setter for renderPieceOfView
}

视图

<h:panelGroup rendered="#{myBackingBean.renderPieceOfView}">
    ... this will be rendered or not ...
</h:panelGroup>

您还可以创建将放置在... this will be rendered or not ...

中的模板文件
<h:panelGroup rendered="#{myBackingBean.renderPieceOfView}">
    <ui:include src="#{templateFactory.currentViewPath}" />
</h:panelGroup>