在另一个jsf页面中包含jsf页面作为条件

时间:2013-04-12 17:30:02

标签: jsf richfaces facelets templating uiinclude

我希望你能帮助我。 我使用jsf和richefaces,我有一个jsf页面,我想根据参数包含所有其他页面,我的问题是如何在我的xhtml文件中引入测试条件。

谢谢你的回复, 有我的代码,但它不起作用, 我的豆子

 public class TestBean {
 private boolean ajoutH;
 private boolean listH;

 public boolean isListH() {
 FacesContext fc = FacesContext.getCurrentInstance();
 Map<String,String> params = 
                fc.getExternalContext().getRequestParameterMap();
 String id = params.get("listH");
 if(id.equals("listH")){

 return true;}
 else{
 return false;
}
 }
 public boolean isAjoutH() {
 FacesContext fc = FacesContext.getCurrentInstance();
 Map<String,String> params = 
                fc.getExternalContext().getRequestParameterMap();
 String id = params.get("ajoutH");
 if(id.equals("ajoutH")){
 return true;}
 else{
 return false;}

我的页面jsf

<rich:panelMenuGroup label="Hotes">
<rich:panelMenuItem>
<h:outputText value="Ajouter Hote" event="onclick">
<f:param value="{ajoutH}" name="ajoutH"  />
</h:outputText>
</rich:panelMenuItem>
<rich:panelMenuItem >
<h:outputText value="Gérer Hotes" >
<f:param value="{listH}" name="listH"  />
</h:outputText>

......
<h:panelGroup rendered="#{TestBean.ajoutH}">
<ui:include src="./ajoutHote.xhtml"/>
</h:panelGroup>
<h:panelGroup rendered="#{TestBean.listH}">
<ui:include src="./listHotes.xhtml"/>
</h:panelGroup>

2 个答案:

答案 0 :(得分:2)

这里有不同的选项,因为你使用的是richfaces,我也会包含一个例子。

如果您选择纯JSF方法,请使用由{bean}定义的<h:panelGroup>属性rendered。此属性必须为boolean

<h:panelGroup rendered="#{yourBean.yourCondition}">
    <ui:include src="pages/yourPage.xhtml">
    ...
</h:panelGroup>

另一种选择是使用<a4j:region>。它基本上以相同的方式工作。

<a4j:region rendered="#{yourBean.yourCondition}">
    <ui:include src="pages/yourPage.xhtml">
    ...
</a4j:region>

无论您的选择如何,您的bean都应该定义条件:

public Boolean isYourCondition() {
    return /*your logic here*/;
}

有很多方法可以采取,只需选择。

答案 1 :(得分:0)

使用a4j:outputpanel并在其中使用ui:include:

    <a4j:outputPanel rendered="#{someBean.someBoolean}">
        <ui:include src="somepage.xhtml" />
    </a4j:outputPanel>