1

このアプリケーションはJSF2.0ファセットで記述されており、 jQueryスライドが制御する領域にコンテンツを表示することになっている次のコードがあります。つまり、その領域を表示するボタンを押し、もう一度押すと非表示になります。

<f:ajax render="messageID">
      <h:form id="myform" styleClass="form1" >
          <h:message id="messageID" for="signinemail" class="messageforlogin"/>
          <h:panelGrid styleClass="loginpanel" columns="2" cellspacing="4">

          <h:outputText value="Email: "/>
          <h:inputText class="textboxes"  size="20" id="signinemail" 
                      value="#{signinBean.email}" 
                      validatorMessage="Invalid Email, Try Again">
              <f:validateRegex pattern="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"/>

          </h:inputText>

ご覧のとおり、メールが正しく入力されていない場合に表示されるエラーメッセージがあります。前に述べたように、この領域はjquery.slidetoggle関数と、入力するスライドにするボタンで制御されます。

使用者が送信ボタン(ここには表示されていません)を押すと、スライドがフリーズし、エラーメッセージが表示されません。「ajax」を削除すると、メッセージは表示されますが、スライドが消え、トグルボタンをもう一度押す必要があります。エラーメッセージのあるスライドを参照してください。同じページでこれを実行しましたが、スライドはありません。非常にうまく機能します。

スライドとその上のエラーメッセージを表示するために離れていますか?

4

1 に答える 1

2

スライドの設定を担当するjQueryスクリプトは、JSF ajaxリクエストが完了したときに再実行する必要があります。これは、ajaxレスポンスがHTML DOMツリーの要素を変更/置換し、サーバーから取得した新しい要素で置き換えられるためです。これらのjQueryで初期化されたイベントハンドラーはもう含まれていません。jQueryスクリプトは、ajaxリクエストが完了するたびに自動実行されるわけではなく、ページを更新するたびに自動実行されます。

次のように、JSFajaxイベントコールバックハンドラーでjQuery関数を再度呼び出す必要があります。

jsf.ajax.addOnEvent(function(data) {
    if (data.status == "success") {
        yourjQueryFunctionWhichAddsTheSlideEvents();
    }
});

別の方法は、OmniFacesを使用することです<o:onloadScript>

<o:onloadScript>yourjQueryFunctionWhichAddsTheSlideEvents();</o:onloadScript>

このようにして、あなたももう必要あり$(document).ready()ません。

于 2012-06-22T05:24:19.640 に答える