我有一个JSF 2.2表单,其中包含一个<h:selectOneMenu>
,输入和4个按钮来调用CRUD方法。为了实现绑定,我使用valueChangeListener
,这样当我从id
中选择<h:selectOneMenu>
时,我会调用一个方法来更新链接到输入的对象。问题是输入不会改变它们的价值。
表格
<h:selectOneMenu value="#{avocatBurController.numProf}"
valueChangeListener="#{avocatBurController.handelValueCahnge}" onchange="submit()">
<f:selectItems value="#{avocatBurController.lstAvocatbureau}" var="avcBur"
itemValue="#{avcBur.avocat.numProf}" itemLabel="#{avcBur.avocat.nom}" />
</h:selectOneMenu>
<h:inputText value="#{avocatBurController.avc.prenom}" />
<h:inputText value="#{avocatBurController.avc.nom}" />
...
ManagedBean
public void handelValueCahnge(ValueChangeEvent event) {
String numProf = (String) event.getNewValue();
AvocatBurDao avcBurDao = new AvocatBurDao();
avcBur = avcBurDao.getAvocatBur(numProf);
avc = avcBur.getAvocat();
System.out.println(avc.getNom());
}
avc.getNom()
包含值但输入不是
答案 0 :(得分:3)
valueChangeListener
是在更改当前输入时更新其他输入组件的值的错误工具。有一些方法,但它们是基于在ajax不存在的黑暗JSF 1.x时代发明的黑客/技巧。
正如您已经使用JSF 2.x,只需立即使用ajax。
<h:selectOneMenu value="#{avocatBurController.numProf}">
<f:selectItems value="#{avocatBurController.lstAvocatbureau}" var="avcBur"
itemValue="#{avcBur.avocat.numProf}" itemLabel="#{avcBur.avocat.nom}" />
<f:ajax listener="#{avocatBurController.handleValueChange}" render="@form" />
</h:selectOneMenu>
public void handleValueChange() {
AvocatBurDao avcBurDao = new AvocatBurDao();
avcBur = avcBurDao.getAvocatBur(numProf);
avc = avcBur.getAvocat();
}