を読んでいない私はonclickのからの問い合わせの後に設定されてLOGGEDINブールを持ってAdminBeanありますJSFのF:アヤックスのonEventがBean値
<h:commandButton rendered="#{!adminBean.loggedIn}" styleClass="moreButtonAsText" id="adminLoginAsText" value="Login" action="#{adminBean.logIn}">
<f:ajax render="detailsBox adminForm" execute="@form" onevent="onevent"/>
</h:commandButton>
</h:form>
</div>
<script type="text/javascript">
function onevent(e){
if(e.status=='success') {
alert(#{adminBean.loggedIn});
}
if(e.status=='complete') {
alert(#{adminBean.loggedIn});
}
}
</script>
を私は別のjavascriptの事をしたいので、私はこれを必要としますユーザーが正常にログインしたかどうかに基づいています。コマンドボタンが最初にクリックされ(明らかに)、ログインした後はtrueに設定されます。私は私のAdminBeanクラスで明示的にこれを持っている:
public boolean isLoggedIn() {
System.out.println(loggedIn);
return loggedIn;
}
は、もともと私はのonEventはすべてonevent="#{adminBean.loggedIn} ? yesFunction : noFunction
のように入れ子になっていたが、これは動作しませんでした。だから私は周りを読んで見つけた http://fyhao.com/2010/05/computer-and-it/java/java-server-faces/jsf-2-fajax-why-execute-onevent-three-times/ 私はそれをインライン関数に分割することにしましたが、これはまだ動作しませんでした。
次に、私は、JavaScriptが値を考えていることについての明確な警告文を除いて、上に掲載したものに進むことにしました(そして、私のプリントラインが同意するかどうかを確認する...)。最初のアラート(e.status=='complete'
)は、最初はたくさんの偽物を印刷し、その後多くの真実をプリントします。
JavaScriptアラートはfalseです。
コンソールをクリアし、アラートの[OK]をクリックします。その後、コンソールにはは表示されず、と表示され、2番目のアラートはまだ偽と呼ばれます。私のJavaScriptは失敗します。
私が気づいたもう1つの奇妙なことは... AdminBeanはセッションスコープです。アドレスバーのEnterキーをもう一度押すと、JavaScriptが本当に警告されます...たとえレンダリングが正常に機能していても(JavaScriptアラートtrue
であっても、ログイン時にレンダリングされるものは表示されません) 。
何が起こっているのですか?
詳細情報/コードが必要な場合は、お尋ねください。
編集#1:私はその上に言ったとき
は、私はまたonevent="#{adminBean.loggedIn} ? yesFunction : noFunction
を試してみました 、onevent="#{adminBean.loggedIn} ? yesFunction : noFunction
を試してみました。私はこれらの関数に引用符/アポストロフィがないかもしれないことに気づいていますが、その問題を解決する前にadminBean.loggedInの問題を修正したいと思います。
編集#2:
選択した回答を参照してください。私はこの解決策に取り組んでいました。その答えは基本的に私の結果を確認しました。
<h:form id="javascriptHack">
<h:form id="hiddenJS" rendered="#{adminBean.loggedIn}" >
<script type="text/javascript">
$(function() {
(#{adminBean.loggedIn}) ? slowCloseAdminPanel() : adminPanelLeftOpen();
});
</script>
</h:form>
</h:form>
これはやっかいな方法かもしれませんが、機能します。
元は、私はf:ajax内にあった 'onevent ="#{adminBean.loggedIn}?first:second "を持っていて、内部にあるフォームを再描画しています。なぜそれがうまくいかないのか分かりません。しかし...私は仕事をしていましたが、今ではあなたが(私があなたのコメントを見た前に)お勧めしたものをテストしています。ソリューションを投稿するコードを編集します。最初の方法はなぜ機能しませんでしたか? – twmb