【问题标题】:New value is not getting updated in the jsf backing bean when submit button is clicked单击提交按钮时,新值未在 jsf 支持 bean 中更新
【发布时间】:2010-11-11 16:07:33
【问题描述】:

我正在创建一个用户管理器页面,该页面在同一页面中更新和添加用户。

视图的相关部分:

<h:outputText value="Existing User: "/>
<h:selectOneMenu value="#{userManagerBean.existingUser}" valueChangeListener="#{userManagerBean.updateDetails}" onchange="submit();">
    <f:selectItems value="#{userManagerBean.existingUserList}"/>
</h:selectOneMenu>

<h:outputText value="User Name: "/>
<h:inputText binding="#{userManagerBean.userNameBinding}" value="#{userManagerBean.userName}"/>

<h:outputText value="Password: "/>
<h:inputSecret redisplay="true" binding="#{userManagerBean.passwordBinding}" value="#{userManagerBean.password}"/>

<h:outputText value="Accessibility: "/>
<h:selectManyCheckbox layout="pageDirection" value="#{userManagerBean.selectedPagesList}" binding="#{userManagerBean.checkBoxBinding}">
    <f:selectItems value="#{userManagerBean.pagesList}"/>
</h:selectManyCheckbox>

<h:commandButton action="#{userManagerBean.submitUser}" image="../images/submit.gif"/>

我在下拉列表中使用值更改侦听器。 bean 是请求范围的。值变化监听代码如下:

public void updateDetails(ValueChangeEvent evt) {
    helper = new Helper();
    System.out.println(evt.getNewValue());
    UserManagerDAO userManagerDAO = new UserManagerDAO();
    List<String> userDetails = userManagerDAO.getUserDetails(evt.getNewValue().toString());
    //setUserName(getExistingUser());

    if (evt.getNewValue().toString().equalsIgnoreCase("select")) {
        passwordBinding.resetValue();
        userNameBinding.resetValue();
        checkBoxBinding.resetValue();
        //setUserName("finland");
    } else {
        passwordBinding.setValue(userDetails.get(0));
        userNameBinding.setValue(evt.getNewValue());
        checkBoxBinding.setValue(helper.splitStringAndAddToList(userDetails.get(1)));
    }
}

当我单击提交按钮时,新的用户名和密码没有绑定到属性,而是返回 null。如果我从 valuechange 事件代码中删除 if-else 块,一切正常。我该如何解决这个问题?

【问题讨论】:

    标签: jsf


    【解决方案1】:

    组件按照它们在视图中出现的顺序进行处理。您正在对尚未处理的组件调用UIInput#setValue()。之后它们的值将被实际提交的值覆盖。而是改用UIInput#setSubmittedValue()

    【讨论】:

    • 感谢您回答我的问题。这么晚才回复很抱歉。你的回答解决了问题。你很酷!!!再次感谢
    猜你喜欢
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 2017-10-16
    相关资源
    最近更新 更多