2016-04-11 24 views
1

我正在嘗試使用JSF ajax請求更改輸入的值。要更改值的JSF ajax事件

我有一個JSF代碼:

<h:inputSecret id="pwd" value="#{info.password}" redisplay="true"> 
    <f:ajax event="focus" listener="#{info.changePassword}" /> 
</h:inputSecret> 

info bean包含:

public String getPassword() { 
    return ""; 
} 

public void changePassword(AjaxBehaviorEvent e) { 
    UIInput input = (UIInput)e.getComponent(); 
    input.setValue(createRandomPassword()); 
} 

createRandomPassword()產生短期的隨機字符串。

但是當輸入獲得焦點,我可以看到changePassword函數被調用,並設置了一些隨機字符串,但輸入的值保持爲空。

那麼,爲什麼不setValue設定的值到組件?我怎樣才能使它工作?

+0

屬性,因爲你無處告訴它更新UI的一面。您只需更新服務器端模型。但爲什麼不設置創建一個名爲「密碼」的字段,並設置而不是從事件獲取輸入? – Kukeltje

+0

@Kukeltje我是JSF的新手,我認爲它會完成這項工作。你能告訴我一個例子嗎? – nrofis

+0

請從一些**好**教程開始......請參閱https://stackoverflow.com/tags/jsf/info這是一個基本的東西,閱讀這些會讓你知道這個和更多的東西.. – Kukeltje

回答

0

你需要它的值設置後重新呈現密碼輸入組件,使用render

<h:inputSecret id="pwd" value="#{info.password}" redisplay="true"> 
    <f:ajax event="focus" listener="#{info.changePassword}" render="pwd"/> 
</h:inputSecret> 
+0

工作!謝謝! – nrofis

+1

我知道你會爲我做同樣的事情。別客氣。 – AsSiDe