【发布时间】:2015-06-15 07:59:18
【问题描述】:
我想做以下事情:
- 从
h:selectOneMenu中选择一个项目 - 通过 ajax 使用新值更新支持 bean
- 使用新值运行 Javascript 函数
在下面的代码中,alert(#{backingBean.derivedValue}) 仍然包含上次更改的值(即,当我选择“二”时它是 0,当我选择“一”时它是 4,等等):
<h:form>
<h:selectOneMenu value="#{backingBean.input1}">
<f:selectItem itemLabel="One" itemValue="1"/>
<f:selectItem itemLabel="Two" itemValue="2"/>
<f:ajax render="@form" onevent="function(data) { if (data.status === 'success') { alert(#{backingBean.derivedValue}) }}"/>
</h:selectOneMenu>
Input value: #{backingBean.input1}
Derived value: #{backingBean.derivedValue}
</h:form>
还有后台豆:
@ManagedBean
@ViewScoped
public class BackingBean {
private int input1;
private int derivedValue;
public int getDerivedValue() {
return derivedValue;
}
public void setDerivedValue(int derivedValue) {
this.derivedValue = derivedValue;
}
public int getInput1() {
return input1;
}
public void setInput1(int input1) {
this.input1 = input1;
derivedValue = input1 * 2;
}
}
有没有办法做到这一点? (顺便说一句,我已经阅读了这个网站上的无数线程,其中类型/某种处理 JSF/ajax/javascript 一起工作,但不是这个特定问题)
【问题讨论】:
-
删除内联 javascript 并使用不显眼的脚本事件处理程序要简单得多。在命名函数中做你需要的一切
-
我不适合内联。你能提供一个你在说什么的样本吗?我不熟悉“脚本事件处理程序”的含义。我试过让 onevent="refresh_on_success" 指向 "function refresh_on_success(data)" 但我有同样的问题......
-
重新编辑 2:我认为你是对的,@wsaxton。看看你页面的 HTML 源代码,看看 Javascript 是怎么说的。
-
@DavidS,HTML 肯定会显示旧值,旧值出现在 javascript 调用中,所以......这当然是一个时间问题。也许 AJAX 标签中的 EL 表达式不像其他标签那样呈现?
-
我看到了同样的行为,@wsaxton。我可以使用
h:outputText在页面上显示新的durationDerivedValue,但如果我在函数内使用Javascriptalert,则会显示旧值。我们可能误解了 EL 的一些基本原理。
标签: javascript ajax jsf