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"
まだ機能していない...
あなたのコードは大丈夫です..何かエラーが発生しますか?あなたの懸念事項は何ですか? –
私の懸念は、selectOneMenuがレンダリングされない/表示されないということです... 'produktAuswahl'ビーンプロパティが設定されているときにクリックします。 – LupoZ
あなたのコードはすべて私に似ています。一つのことですが、あなたの 'p:ajax'の' execute'属性は存在しません。 'p:ajax'コンポーネントの属性は、ここに書かれています:http://www.primefaces.org/docs/vdl/3.5/primefaces-p/ajax.html –