JSF切换组件呈现/未呈现

时间:2017-02-01 10:49:06

标签: jsf primefaces

我是JSF和Primefaces的新手,想知道根据无线电选择(隐藏和重新显示)渲染组件的最佳解决方案是什么?我发布了我的ManagedBean和我的JSF-Page-Excerpt。提前谢谢。

我的JSF-Page:

<p:dialog widgetVar="komponentErstellenDialogWV" modal="true"
            id="komponentErstellenDialog" header="Komponente erstellen">
            <h:form>
                <p:wizard flowListener="#{userWizard.onFlowProcess}">
                    <p:tab id="produktAuswahlTab" title="Produkt auswählen">
                        <p:panel>
                            <h:panelGrid columns="2" columnClasses="label, value">
                                <h:outputText value="Produkt:" />
                                <p:selectOneRadio id="produktAERadio"
                                    value="#{komponenteErstellenWizardController.produktAuswahl}">
                                    <f:selectItem itemValue="1" itemLabel="Neu erstellen" />
                                    <f:selectItem itemValue="2" itemLabel="Aus Liste auswählen" />
                                    <p:ajax event="click" update="produktSelect" />
                                </p:selectOneRadio>
                                <p:selectOneMenu id="produktSelect"
                                    rendered="#{komponenteErstellenWizardController.shouldRenderProduktSelect()}"
                                    value="#{komponenteErstellenWizardController.komponente.produkt}">
                                    <f:selectItems
                                        value="#{komponenteErstellenWizardController.findAllProdukt()}"
                                        var="currentProdukt"
                                        itemLabel="#{currentProdukt.hersteller.concat(' ').concat(currentProdukt.name)}"
                                        itemValue="#{currentProdukt.id}" />
                                </p:selectOneMenu>
                            </h:panelGrid>
                        </p:panel>
                    </p:tab>
                </p:wizard>
            </h:form>
        </p:dialog>

我的ManagedBean:

@ManagedBean
@SessionScoped
public class KomponenteErstellenWizardController implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    // Properties
    private Komponente komponente = new Komponente();
    private String produktAuswahl;

    @PostConstruct
    public void init() {
        produktAuswahl = "1";
    }

    public String getProduktAuswahl() {
        System.out.println("GetProduktAuswahl invoked with returning value: " + produktAuswahl);
        return produktAuswahl;
    }

    public void setProduktAuswahl(String produktAuswahl) {
        System.out.println("SetProduktAuswahl invoked with Value: " + produktAuswahl);
        this.produktAuswahl = produktAuswahl;
    }

    public Komponente getKomponente() {
        return komponente;
    }

    public void setKomponente(Komponente komponente) {
        this.komponente = komponente;
    }

    // EJBs
    @EJB
    KomponenteFacade komponenteFacade;

    @EJB
    ProduktFacade produktFacade;

    @EJB
    ProduktArtFacade produktArtFacade;

    public List<Produkt> findAllProdukt() {
        return produktFacade.findAll();
    }

    public Boolean shouldRenderProduktSelect() {
        System.out.println("Wizard Produktauswahl: " + produktAuswahl);
        return "2".equals(produktAuswahl);
    }
}

我根据建议更新了我的代码:

  • 通过primefaces组件替换面部组件
  • 添加了新的操作方法&#34; shouldRenderProduktSelect&#34;

仍然没有工作......

1 个答案:

答案 0 :(得分:0)

很少......

1)将此方法添加到您的控制器:

public boolean shouldRenderSelect(){
   return "2".equals(produktAuswahl);
}

2)更改渲染的属性:

<h:selectOneMenu id="produktSelect"
        rendered="#{komponenteErstellenWizardController.shouldRenderSelect()}"

3)更新你的html:

<p:selectOneRadio id="produktAERadio"
                                    value="#{komponenteErstellenWizardController.produktAuswahl}">
                       <f:selectItem itemValue="1" itemLabel="Neu erstellen" />
                       <f:selectItem itemValue="2" itemLabel="Aus Liste auswählen" />
                       <p:ajax event="click" update="panelSelect" />
       </p:selectOneRadio>
 <h:panelGroup id="panelSelect"> 
   <p:selectOneMenu id="produktSelect"
                rendered="#{komponenteErstellenWizardController.shouldRenderProduktSelect()}"
    ... 
   </p:selectOneMenu>
 </h:panelGroup>   

关键是将selectOneMenu包含在ajax中以及更新panelGroup,而不是菜单。