微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过Ajax刷新由JSF填充的JavaScript变量?

我要执行以下操作:

>从h:selectOneMenu中选择一项
>通过ajax用新值更新支持bean
>使用新值运行Javascript函数

不过,在下面的代码中,alert(#{backingBean.derivedValue})仍然包含上次更改的值(即,当我选择“ Two”时为0,当我选择“ One”时为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协同工作,但不是这个特定问题)

解决方法:

我成功实现了此答案中提出的解决方Getting backing bean value with Javascript,该解决方案使用PrimeFace’s RequestContext在服务器端添加了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的好方法.)

也可以看看

> Getting backing bean value with Javascript

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐