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>
問題は、myMethod() が完了する前に、javascript が検証済みの属性をチェックしているように見えることです。そのため、非表示のボタンをクリックするとすぐにブール値の値が要求されますが、myMethod() はまだ完了していません。
javascript をシーケンシャルに動作させるにはどうすればよいですか?
ありがとう!