2017-02-01 16 views
0

JSFとPrimefacesを初めて使用し、ラジオ選択(隠蔽と再表示)に従ってコンポーネントをレンダリングするのが最善の解決策であることを知りたがっていますか? ManagedBeanとJSF-Page-Excerptを投稿しました。前もって感謝します。JSFトグルコンポーネントのレンダリング/非レンダリング

マイJSF-ページ:

<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コンポーネント
  • 追加により部品に直面しています新しいアクションメソッド "shouldRenderProduktSelect"

まだ機能していない...

+0

あなたのコードは大丈夫です..何かエラーが発生しますか?あなたの懸念事項は何ですか? –

+0

私の懸念は、selectOneMenuがレンダリングされない/表示されないということです... 'produktAuswahl'ビーンプロパティが設定されているときにクリックします。 – LupoZ

+0

あなたのコードはすべて私に似ています。一つのことですが、あなたの 'p:ajax'の' execute'属性は存在しません。 'p:ajax'コンポーネントの属性は、ここに書かれています:http://www.primefaces.org/docs/vdl/3.5/primefaces-p/ajax.html –

答えて

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> 

キー内およびAjaxはpanelGroup、ないメニューを更新からselectOneMenuをラップすることです。

+0

提案に感謝します。しかし、私は現在、実行時間を延期していません。あなたはなぜその答えが無効だと思いますか? –

+0

私のコードを提案に従って更新しました:プライムフェイスコンポーネントでフェイスコンポーネントを置き換え、新しいアクションメソッド "shouldRenderProduktSelect"をまだ追加していません... selectOneMenuが表示されません... – LupoZ

+0

Ok回答が更新されました。あなたが価値をもたらすと思うなら、それを受け入れることを投票していただきありがとうと思います。ありがとう –

関連する問題