我想用另一个(d1)更新selectOneMenu(d2)而不是d2 componoent应该更新消息框。一切都很好,但是当我尝试使用带有更新值的selectOneMenu(d2)时,它会导致错误:“form:d2:验证错误:值无效”。
当我将“editable =”true“添加到selectOneMenu(d2)时,一切正常。
我的页面:
<h:form id="form">
<p:growl id="msgs" />
<p:selectOneMenu id="d1" value="#{jSFManagedBean.d1SelectedItem}" effect="fold"
filter="true" filterMatchMode="contains">
<f:selectItem itemValue="" itemLabel="Select one" />
<f:selectItems value="#{jSFManagedBean.d1ItemList}" />
<f:ajax event="change" listener="#{jSFManagedBean.generateD2List()}" render="d2" />
</p:selectOneMenu>
<p:selectOneMenu id="d2" value="#{jSFManagedBean.d2SelectedItem}" >
<f:selectItem itemValue="" itemLabel="Select one1" />
<f:selectItems value="#{jSFManagedBean.d2ItemList}" />
<f:ajax event="change" listener="#{jSFManagedBean.addInfo()}" render="msgs" />
</p:selectOneMenu>
</h:form>
jSFManagedBean:
@ManagedBean
@RequestScoped
public class JSFManagedBean
{
public void addInfo()
{
System.out.println("Add Info D1: " + D1SelectedItem + " D2: " + D2SelectedItem );
}
....
}
d1ItemList creaded in:
@PostConstruct
public void init()
{
System.out.println("INIT");
if (dana1Facade.findAll().size() < 1)
{
for (int i = 0 ; i < 10 ; i ++)
{
Entities.Dana1 d1 = new Entities.Dana1();
//d1.setId(1l);
d1.setPozycja("Pozycja " + i);
dana1Facade.create(d1);
}
}
....
}
d2ItemList创建于:
public void generateD2List()
{
d2ItemList = new ArrayList<String>();
d2ItemList = dana2Facade.getDana2Pozycja(Integer.parseInt(D1SelectedItem.substring(0, 1)));//Integer.parseInt(D1SelectedItem.substring(0, 1))
}
答案 0 :(得分:0)
从
改变 <f:ajax event="change" listener="#{jSFManagedBean.generateD2List()}"
render="d2" />
到
<f:ajax event="change" listener="#{jSFManagedBean.generateD2List()}"
update="d2" />
看看是否有帮助。