Jsf primefaces SelectOne菜单如何重新加载
我在项目中使用了3个selectOneMenu组件。我需要在第一次更改后重新加载第二次的内容。这里是文件的一些部分 index.xhtmlJsf 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
<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。但是你帮我理顺了我的代码。这是造成麻烦的主要原因,所以改变代码对我很有帮助。非常感谢。