更改h时更新其他输入组件的值:选择OneMenu



我有一个JSF 2.2表单,其中包含一个<h:selectOneMenu>、输入和4个调用CRUD方法的按钮。为了实现绑定,我使用了valueChangeListener,因此当我从<h:selectOneMenu>中选择id时,我调用一个方法来更新链接到输入的对象。问题是输入不会改变其值。

表单

<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()包含一个值,但输入没有。

valueChangeListener是错误的工具,用于在当前输入发生变化时更新其他输入组件的值。有很多方法,但它们都是基于黑暗的JSF 1.x时代发明的技巧。当时ajax还不存在。

由于您已经使用了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();
}

另请参阅:

  • 何时使用valueChangeListener或f:ajax侦听器

相关内容

  • 没有找到相关文章

最新更新