2010-11-11 82 views
2

我正在創建一個用戶管理器頁面,用於在同一頁面更新和添加用戶。單擊提交按鈕時,jsf backing bean中的新值沒有得到更新

視圖的相關部分:

<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塊,則一切正常。我怎麼解決這個問題?

回答

3

按照它們在視圖中出現的順序處理組件。您正在對尚未處理的組件調用UIInput#setValue()。之後他們的值將被實際提交的值覆蓋。相反,使用UIInput#setSubmittedValue()

+0

謝謝你回答我的問題。這麼晚纔回復很抱歉。你的答案解決了這個問題。你很酷!!!再次感謝 – mvg 2010-11-12 05:09:53

+0

不客氣。 – BalusC 2010-11-12 11:17:22