我有这段代码:
<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中的最后一行),它显示它应该是什么。对不起所有的编辑;就像我说的那样,这是我第一次发帖。
答案 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()"/>