JSF ajax事件改变了价值

时间:2016-04-11 15:43:44

标签: jsf jsf-2.2

我正在尝试使用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没有为组件设置值?我怎样才能使它有效?

1 个答案:

答案 0 :(得分:1)

使用

的渲染属性设置其值后,需要重新渲染密码输入组件
<h:inputSecret id="pwd" value="#{info.password}" redisplay="true">
   <f:ajax event="focus" listener="#{info.changePassword}" render="pwd"/>
 </h:inputSecret>