单击提交按钮时,jsf支持bean中的新值未更新 [英] New value is not getting updated in the jsf backing bean when submit button is clicked

查看:76
本文介绍了单击提交按钮时,jsf支持bean中的新值未更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am creating a user manager page which updates and adds users in the same page.

视图的相关部分:

<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是请求范围的.值更改侦听器代码如下:

I am using value change listener in the dropdownlist. The bean is request scoped. The value change listener code is below:

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块,则一切正常.我该如何解决这个问题?

When I click the submit button, new username and password is not getting bind to the property, instead the value is returning null. If I remove the if-else block from the valuechange event code, everything works normal. How can I solve this problem?

推荐答案

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

The components are processed in the order as they appear in the view. You're calling UIInput#setValue() on components which aren't processed yet. Their values will be overridden afterwards with the actual submitted values. Rather use UIInput#setSubmittedValue() instead.

这篇关于单击提交按钮时,jsf支持bean中的新值未更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆