我想做以下事情:
- 从其中选择一个项目
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 获取支持 bean 值 https://stackoverflow.com/a/14966432/201891它使用PrimeFace 的 RequestContext http://www.primefaces.org/showcase/ui/misc/requestContext.xhtml在服务器端添加 Javascript 回调参数。
这是我的 Facelets 页面:
<h:form>
<p:selectOneMenu value="#{backingBean.input1}">
<f:selectItem itemLabel="One" itemValue="1"/>
<f:selectItem itemLabel="Two" itemValue="2"/>
<p:ajax oncomplete="afterLoad(xhr, status, args)"/>
</p:selectOneMenu>
<h:outputScript>
function afterLoad(xhr, status, args) {
alert("Input * 2 = " + args.derived);
}
</h:outputScript>
</h:form>
这是我的支持豆:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.context.RequestContext;
@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;
RequestContext.getCurrentInstance().addCallbackParam("derived", derivedValue);
}
}
(我不知道这是否是集成 JSF 和 D3 的一个好的解决方案。)
See also
- 使用 Javascript 获取支持 bean 值 https://stackoverflow.com/questions/14966205/getting-backing-bean-value-with-javascript/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)