JSF ajax 事件改变值

JSF ajax event to change value

我正在尝试使用 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不给组件设置值呢?我怎样才能让它发挥作用?

您需要在设置其值后重新渲染密码输入组件,使用

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