我有一个使用 JSF 2.0、javascript 和查询 1.9 的应用程序。我有一种情况,我需要根据 bean 方法的结果有条件地渲染组件。现在的逻辑是,当单击按钮时,javascript 会以某种 .css 样式显示带有成功消息的组件。我需要的是,当单击同一个按钮时,javascript 会调用 bean 的方法,并根据该方法的结果,显示相同的成功组件或另一个组件来解释它失败的原因。我知道javascript和jquery都不能直接调用bean的方法,所以相反,javascript会点击一个隐藏的按钮来调用bean的方法。所以,一般来说,这就是我想要做的。
豆类代码
public boolean getValidated(){
return validated;
}
public void setValidated(boolean value){
validated = value;
}
public void myMethod(){
....
if(condition){
validated = true;
}else{
validated = false;
}
}
JSF 代码
<h:commandButton onclick="magic()/>
<h:commandButton id="hiddenButton" action="#{bean.myMethod}" style="display:none;"/>
<script type="text/javascript">
// <![CDATA[
function magic(){
document.getElementById('hiddenButton').click();
if(#{bean.validated}){
NI.pnx.messaging.popMessage(NI.pnx.messaging.messageTypes.success,['<strong>The requested updates have been saved.</strong> <a href="" class="right"><strong>Undo Change</strong></a>'],NI.pnx.messaging.messageTimeoutSpeeds.slow);
}else{
NI.pnx.messaging.popMessage(NI.pnx.messaging.messageTypes.error,['<strong>The requested updates have not been saved.</strong> <a href="" class="right"><strong>Undo Change</strong></a>'],NI.pnx.messaging.messageTimeoutSpeeds.slow);
}
}
// ]]>
</script>
问题是 javascript 似乎在 myMethod() 完成之前检查了已验证的属性。因此,它几乎点击了隐藏按钮并立即询问布尔值,而 myMethod() 甚至还没有完成。
如何使 javascript 以顺序方式运行?
谢谢!