簡體   English   中英

primefaces selectOneMenu如何重新加載

[英]primefaces selectOneMenu how to reload

我在項目中使用了3個selectOneMenu組件。 我需要在第一次更改后重新加載第二個內容。 以下是文件的一些部分

的index.xhtml

<h:form id="form">
<p:selectOneMenu id="Rząd" value="#{birdSelectorBean.selectedState}" effect="fade"
style="width: 150px;">  
<f:selectItem itemLabel="Rząd" itemValue="" />  
<f:selectItems value="#{birdSelectorBean.rzad}" />  
<p:ajax render="@form" listener="#{birdSelectorBean.stateChangeListener}" />
</p:selectOneMenu> 

<p:selectOneMenu id="rodzina" value="#{birdSelectorBean.selectedState}" effect="fade"
style="width: 150px;">  
<f:selectItem itemLabel="Rodzina" itemValue="" />
<f:selectItems value="#{birdSelectorBean.rodzina}" />
</p:selectOneMenu>

<p:selectOneMenu id="rodzaj" value="#{birdSelectorBean.selectedState}" effect="fade"
style="width: 150px;">  
<f:selectItem itemLabel="Rodzaj" itemValue="" />   
<f:selectItems value="#{birdSelectorBean.rodzaj}" />
</p:selectOneMenu>
</h:form>

BirdSelectionBean.java:

public class BirdSelectorBean
{
private String selectedState;
private List<SelectItem> rzad;
private List<SelectItem> rodzina;
private List<SelectItem> rodzaj;

public BirdSelectorBean()
{
    rzad = new ArrayList<>();
    rzad.add(new SelectItem("Rząd_X"));
    rzad.add(new SelectItem("Rząd_Y"));
    rzad.add(new SelectItem("Rząd_Z"));

    rodzina = new ArrayList<>();
    rodzaj = new ArrayList<>();
}

public void stateChangeListener(ValueChangeEvent event)
{
    rodzina.clear();
    rodzina.add(new SelectItem("Rodzina_A"));
    rodzina.add(new SelectItem("Rodzina_B"));
    rodzina.add(new SelectItem("Rodzina_C"));
}
...
getters and setters
...
}

我閱讀了很多相關主題,但它對我不起作用。 我試過update =“rodzina”,就像它在這里的示例一樣,渲染選項就像在該主題中說的那樣:但它仍然不起作用。 請幫我 :]

p:ajax標簽中,將render="@form"改為update="@form" 渲染由f:ajax使用,由於某種原因,primefaces使用另一個名稱 - 請參閱此處

看起來你的stateChangeListener方法被調用了,更重要的是,你的托管bean看起來沒有任何范圍(至少來自你的問題內容),請記住它必須至少是@ViewScoped才能使其工作。 此外,您的代碼中的另一個問題是您使用相同的屬性來選擇三個<p:selectOnuMenu> (這還不是問題,因為您還沒有達到您想要的開始)。

要使ajax更新起作用,請從stateChangeListener刪除該參數。 另外,讓我們從下拉列表中為所選項添加其他兩個屬性。

@ManagedBean
@ViewScoped
public class BirdSelectorBean {

    private String selectedState;
    private String selectedStateRodzina;
    private String selectedStateRodzaj;
    //other fields and methods...

    public void stateChangeListener() {
        rodzina.clear();
        rodzina.add(new SelectItem("Rodzina_A"));
        rodzina.add(new SelectItem("Rodzina_B"));
        rodzina.add(new SelectItem("Rodzina_C"));
    }
}

然后在<p:ajax>調用中更新所需的<p:selectOneMenu> (我從類似樣式的組件中刪除了與問題屬性無直接關系):

<p:selectOneMenu id="Rząd" value="#{birdSelectorBean.selectedState}">
    <f:selectItem itemLabel="Rząd" itemValue="" />
    <f:selectItems value="#{birdSelectorBean.rzad}" />
    <p:ajax update="rodzina" listener="#{birdSelectorBean.stateChangeListener}" />
</p:selectOneMenu>

<p:selectOneMenu id="rodzina" value="#{birdSelectorBean.selectedStateRodzina}">
    <f:selectItem itemLabel="Rodzina" itemValue="" />
    <f:selectItems value="#{birdSelectorBean.rodzina}" />
</p:selectOneMenu>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM