我有3 <p:selectOneMenu>
,其中两个在这里喂第三个。但是当我在一个组合框中选择时,该值会在另一个组合框中消失。
为此,我在两个<p:ajax>
中使用了两个<p:selectonemenu>
个组件。
<p:panel columns="4" cellpadding="5" id="panelAddColor" header="#{msg['configuration_assignment_modif_panelheader']}" style="width: 500px;">
<table>
<tr>
<td>
<h:outputLabel for="comboBox_listBump" value="#{msg['bumper']}" />
</td>
<td>
<p:selectOneMenu id="comboBox_listBump" value="#{assignmentModificationController.idTypeBumper}" effect="fade" style="width: 100px;" styleClass="greyBackMenu" panelStyleClass="greyBackPanel">
<p:ajax event="change" listener="#{assignmentModificationController.comboboxBumpersChange()}" update="machine,comboBox_listBump,tint" />
<f:selectItem itemLabel="#{msg['menu_production_NewTech']}" itemValue="" />
<f:selectItems value="#{assignmentModificationController.listBumper}" var="b" itemLabel="#{b.name}" itemValue="#{b.id}"/>
</p:selectOneMenu>
</td>
<td>
<p:message for="comboBox_listBump" />
</td>
</tr>
<tr>
<td>
<h:outputLabel for="tint" value="#{msg['configuration_safetystock_tint']}" />
</td>
<td>
<p:selectOneMenu id="tint" value="#{assignmentModificationController.idTint}" effect="fade" styleClass="greyBackMenu" panelStyleClass="greyBackPanel">
<p:ajax event="change" listener="#{assignmentModificationController.comboboxBumpersChangeTint()}" update="machine,comboBox_listBump,tint" />
<f:selectItem itemLabel="#{msg['menu_production_NewTech']}" itemValue="" />
<f:selectItems value="#{assignmentModificationController.listTypeTint}" var="p" itemLabel="#{p.name}  " itemValue="#{p.id}" />
</p:selectOneMenu>
</td>
</tr>
<tr>
<td>
<h:outputLabel for="machine" value="#{msg['menu_configuration_machines']}" />
</td>
<td>
<p:selectOneMenu id="machine" value="#{assignmentModificationController.idMachine}" effect="fade" >
<f:selectItem itemLabel="#{msg['menu_production_NewTech']}" itemValue="" />
<f:selectItems value="#{assignmentModificationController.listMachines}" var="p" itemLabel="#{p.name}  " itemValue="#{p.id}" />
</p:selectOneMenu>
</td>
<td>
<p:message for="machine" />
</td>
</tr>
</table>
<center>
<p:commandButton value="Créer" update="growl,panelAddColor" validateClient="true" style="font-size: 13px;" action="#{assignmentModificationController.addTintAssignment}" />
-
<p:commandButton value="Quitter" style="font-size: 13px;" action="TO_config_menu" />
</center>
</p:panel>
我在bean中的测试:
@PostConstruct
public void init() {
setListBumper(TypeBumpHome.getAll());
setListTint(TypeTintHome.getAll());
setListMachines(MachineHome.getAll());
List<TypeTint> allTypeTint = new ArrayList<TypeTint>();
allTypeTint = TypeTintHome.getAll();
for (TypeTint t : allTypeTint) {
colorList.put(t.getId(), t.getName());
}
setListTypeTint(TypeTintHome.getAll());
}
public void comboboxBumpersChange() {
System.out.println("BUMPER : " + getIdTypeBumper() + " " + getIdTint());
}
public void comboboxBumpersChangeTint() {
System.out.println("TINT : " + getIdTypeBumper() + " " + getIdTint());
}
答案 0 :(得分:2)
根据评论,您使用的是@RequestScoped
bean。 ajax事件会导致新的请求,因此它会被重建并因此失去其当前状态。解决方案是使用视图范围并利用JSF&#39;有状态的性质。
另见