Включить в качестве условия страницы jsf на другой странице jsf

Я надеюсь, что вы можете мне помочь. Я работаю с 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>

person user2218876    schedule 12.04.2013    source источник


Ответы (2)


Здесь есть разные варианты, и, поскольку вы используете Richfaces, я также приведу пример для этого.

Если вы предпочитаете чистый JSF-подход, используйте <h:panelGroup> с атрибутом rendered, определенным вашим bean-компонентом. Этот атрибут должен быть 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>

Независимо от вашего выбора, ваш компонент должен определять условие:

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

Есть много подходов, просто выберите свой.

person Fritz    schedule 12.04.2013
comment
проблема в том, что у меня есть несколько страниц jsf и я должен отображать одну страницу - person user2218876; 12.04.2013
comment
Вот для чего в примере нужны .... Вы можете разместить несколько элементов <ui:include/> на одной странице. Они будут включены в указанном вами порядке. Я предполагаю, что у вас есть дизайн пользовательского интерфейса. Если вам нужно проверить РАЗНЫЕ условия для каждого включения, вам просто нужно поместить каждое из них в другой регион или группу панелей с соответствующим атрибутом рендеринга. - person Fritz; 12.04.2013

используйте a4j:outputpanel и внутри него ui:include:

    <a4j:outputPanel rendered="#{someBean.someBoolean}">
        <ui:include src="somepage.xhtml" />
    </a4j:outputPanel>
person Nick Russler    schedule 12.04.2013
comment
проблема в том, что у меня есть несколько страниц jsf и я должен отображать одну страницу - person user2218876; 12.04.2013
comment
Вы можете включить несколько страниц с помощью ui:include в одну страницу. Взгляните на это. - person Nick Russler; 12.04.2013