Jsf primefaces SelectOne菜单如何重新加载

Jsf primefaces SelectOne菜单如何重新加载,jsf,primefaces,selectonemenu,Jsf,Primefaces,Selectonemenu,我在项目中使用了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" itemVal

我在项目中使用了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
...
}
public class BirdSelectorBean
{
私有字符串selectedState;
私人清单rzad;
私人名单罗吉纳;
私人名单rodzaj;
公共鸟粪
{
rzad=newarraylist();
添加(新选择项(“Rząd_X”);
添加(新选择项(“RządąY”);
添加(新选择项(“RządąZ”);
rodzina=新的ArrayList();
rodzaj=新的ArrayList();
}
public void stateChangeListener(ValueChangeEvent事件)
{
rodzina.clear();
添加(新选择项(“rodzina_A”);
添加(新选择项(“rodzina_B”);
添加(新选择项(“rodzina_C”);
}
...
接球手和接球手
...
}
我读了很多关于这方面的文章,但对我来说不起作用。我尝试了update=“rodzina”,就像在示例中一样 和渲染选项,就像上面说的那样 :
但它仍然不起作用。请帮助我:

p:ajax
标签更改
render=“@form”
update=“@form”
。Render由
f:ajax
使用,primefaces出于某种原因使用另一个名称-请参阅。

看起来您的
stateChangeListener
方法从未被调用过,更重要的是,您的托管bean看起来没有任何作用域(至少从您的问题内容来看),请记住,它必须至少为
@viewscope
,才能执行此操作。另外,代码中的另一个问题是,您正在使用相同的属性为三个
选择数据(这还不是问题,因为您还没有实现您想要的开始)

要使ajax更新生效,请从
stateChangeListener
中删除该参数。另外,让我们为DropDownList中的选定项添加另外两个属性

@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"));
    }
}
然后在
调用中更新所需的
(我从组件(如样式)中删除了与问题不直接相关的属性):



非常感谢。你的帮助对我很有帮助。我在xml文件中配置了bean。但是你帮我理顺了我的代码。这是造成麻烦的主要原因,所以改变代码对我很有帮助。非常感谢。