我正在尝试使用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 :(得分:1)
使用
的渲染属性设置其值后,需要重新渲染密码输入组件<h:inputSecret id="pwd" value="#{info.password}" redisplay="true">
<f:ajax event="focus" listener="#{info.changePassword}" render="pwd"/>
</h:inputSecret>