不完整方法中的PrimeFaces属性不更新

时间:2015-02-17 19:13:14

标签: javascript jsf primefaces

我有这段代码:

<div id="visibleButtons">
    <p:commandButton id="hint" action="#{tutorSession.hintRequest}" value="Hint Please" update="@parent" oncomplete="playNextHint(#{tutorSession.giveWarning});">
    </p:commandButton>
    <p:commandButton id="newType" action="#{tutorSession.newPathRequest}" value="Something Else" update="@parent" oncomplete="playNextHint(#{tutorSession.giveWarning});">
    </p:commandButton>
    #{tutorSession.giveWarning}<!-- I will remove this line once the buttons are working -->
</div>

正在发生的事情是javascript函数playNextHint正在执行上一次调用的giveWarning值,而不是当前的值。我检查了服务器返回正确的值;它是。实际上,我在底部添加了一点文本输出来验证是否返回了正确的值,它总是以我期望的方式显示,但javascript仍然使用旧值。

对可能发生的事情的任何想法?

javascript方法,如果相关:

function playNextHint(giveWarning){
    alert(giveWarning);
}

提前谢谢。

编辑:我通过使用带有值的隐藏字段找到了解决方法,然后在javascript中获取该字段的值,但这很麻烦,必须有更好的方法,因为我将会这样做这个网络应用程序有很多这样的东西。

编辑2:对不起,我留下了一些代码用于演示目的,似乎让人感到困惑。首先,我不想显示给予警告。那就是那里,所以我可以看到它得到了正确的价值。我留下了它,所以人们可以看到正确的价值出现在哪里,而不是它没有。

编辑3:按下按钮时我想要做的是计算服务器上的giveWarning的新值(该部分有效),然后将其发送到javascript函数以根据它执行逻辑(警报是一个占位符和测试)。问题是,javascript函数获得的值似乎总是落后于应有的值,即使我只是将值传递给屏幕(div中的最后一行),它显示它应该是什么。对不起所有的编辑;就像我说的那样,这是我第一次发帖。

2 个答案:

答案 0 :(得分:0)

我认为你只是采取了不恰当的方法。我刚刚创建一个新的<outputLabel>,并在id方法中使用javascript并添加update="label"来更新标签并消除将任何参数传递给此js 1}}方法。你可以查看这个

.xhtml

<h:form id="myForm"> 
      <p:commandButton id="hint" action="#{tutorSession.hintRequest}" value="Hint Please" update="label" oncomplete="playNextHint();">
      </p:commandButton>
      <p:commandButton id="newType" action="#{tutorSession.newPathRequest}" value="Something Else"  update="label" oncomplete="playNextHint();">
      </p:commandButton>
      <p:commandButton id="skip" action="#{tutorSession.giveUp}" value="Skip">
      </p:commandButton>
      <h:outputLabel value="#{tutorSession.giveWarning}" id="label" />
</h:form>

和您的js功能

function playNextHint(){
     alert($('#myForm\\:label').text());
}

并在您的ManagedBean tutorSession

    // other stuff here
    private String giveWarning;

    // setters / getters for giveWarning

    public void hintRequest() {
        setGiveWarning("hint");
    }

    public void newPathRequest() {
        setGiveWarning("newPath");
    }

答案 1 :(得分:0)

我知道这是一个老问题,但我遇到了同样的问题并使用单独的remoteCommand修复了它:

<p:remoteCommand name="playNextHintComplete"
                 oncomplete="playNextHint(#{tutorSession.giveWarning})"/>

<p:commandButton value="Hint Please"
                 action="#{tutorSession.hintRequest}"
                 process="@form"
                 update="@form"
                 oncomplete="playNextHintComplete()"/>