从侦听器方法更改inputText值

Osa*_*lah 3 jsf-2

我有一个inputText:

<h:inputText id="result" value="#{guessNumber.result}"/>
Run Code Online (Sandbox Code Playgroud)

和另一个inputText:

<h:inputText id="name" value="#{guessNumber.named}" onchange="submit()" valueChangeListener="#{guessNumber.processValueChange}"/>
Run Code Online (Sandbox Code Playgroud)

在processValueChange方法中,我添加了以下行:

result = "hello";
Run Code Online (Sandbox Code Playgroud)

但是"result"inputText的显示值仍然是unchainged,问题是什么?

Bal*_*usC 10

valueChangeListener方法无意以这种方式对模型进行更改.它intented监听的模型值的实际变化,在什么地方你有一个手的那一刻新旧模式的价值.例如,执行一些日志记录.它在验证阶段结束时运行,就更新模型值阶段之前.所以,你对模型进行任何更改重视自己内部的监听器方法会在更新模型值阶段被覆盖.

你需要一个<f:ajax listener>代替.这在Invoke操作阶段,这是运行后,更新模型值阶段.

<h:outputText id="result" value="#{guessNumber.result}" />
<h:inputText id="name" value="#{guessNumber.named}">
    <f:ajax listener="#{guessNumber.namedChanged}" render="result" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)

(注意我已经删除了onchange="submit()"JavaScript处理程序!)

public void namedChanged(AjaxBehaviorEvent event) {
    result = "Hello, you entered " + named;
}
Run Code Online (Sandbox Code Playgroud)

(参数是可选的;如果你不需要它,只需省略它)

也可以看看: