2011-01-11 18 views
2

私は壁に当たった。私はa4jタグとrichタグをよく知っています(私はSeam 2.2.0とRichfaces 3.3.1を使用しています)。しかし、私は非常にシンプルな何かをしようとしていますが、豊富な:modalPanel。a4j:リッチでのサポート:modalPanel

リッチ:modalPanelsでは、Ajaxイベントが発生しないようです。ここに簡単な内訳があります: 私はh:selectOneMenuを持っていて、その中にいくつかの項目があり、値はバッキングBeanにアタッチされています。 h:selectOneMenuはa4j:supportタグで、changeイベントが発生するたびにバッキングBeanを更新する必要があります。本当に簡単なものええ?

ただし、このh:selectOneMenuがrich:modalPanelの場合、onchangeイベントはrich:modalPanelが閉じるまでバッキングBeanを更新しません。

私はこれをEclipseのデバッグモードで実行しているため、h:selectOneMenuに接続されたプロパティのセッターにブレークポイントがあるため、これを確認できます。 これは私を怒らせている!これはAjaxのバニラですが、豊富な:modalPanelsは許可していないようです。

質問:私は豊富な:modalPanel内でAjaxの処理を行うことはできますか?私は基本的に、リッチ:modalPanelをフォームとして使用しようとしています(私はa4j:フォームを使用し、h:フォームは役に立たない)、ドロップダウンの変更に反応します(たとえば、ユーザーがドロップダウンを変更したとき、フォームの一部がreRenderedになるはずです)。私はできないことをしようとしていますか?それが動作するはずです

<rich:modalPanel id="quickAddPanel"> 
    <div> 
     <a4j:form id="quickAddPaymentForm" ajaxSubmit="true"> 
       <s:decorate id="paymentTypeDecorator"> 
        <a4j:region> 
         <h:selectOneMenu 
          id="paymentType" 
          required="true" 
          value="#{backingBean.paymentType}" 
          tabindex="1"> 
          <s:selectItems 
           label="#{type.description}" 
           noSelectionLabel="Please select..." 
           value="#{incomingPaymentTypes}" 
           var="type"/> 
          <s:convertEnum/> 
          <a4j:support 
           ajaxSingle="true" 
           event="onchange" 
           eventsQueue="paymentQueue" 
           immediate="true" 
           limitToList="true" 
           reRender="paymentTypeDecorator, paymentDetailsOutputPanel, quickAddPaymentForm"/> 
         </h:selectOneMenu> 
        </a4j:region> 
       </s:decorate> 
      </fieldset> 

      <fieldset class="standard-form"> 
       <div class="form-title">Payment details</div> 
       <a4j:outputPanel id="paymentDetailsOutputPanel"> 
        <h:outputText value="This should change whenever dropdown changes: #{backingBean.paymentType}"/> 
       </a4j:outputPanel> 
      </fieldset> 
     </a4j:form> 
    </div> 
</rich:modalPanel> 

よろしく、 アンディ

+0

a4j:support onchangeイベントで呼び出されるアクションはありますか?はいの場合は、アクションが呼ばれたことを確認しましたか? – niksvp

+0

いいえ。単純なa4j:supportイベント= 'onchange'バインディングで、ドロップダウンが変更されたときにバインドされたバッキングBeanの値が更新されるようにします。そしてそれは更新されますが、モーダルパネルが閉じた後にのみ更新されます。モーダルパネルでなければ、ドロップダウン値が変更されるたびにBeanの更新が行われます。 –

+0

内部(hまたはa4j)の形のモダルパネルが機能するはずです。ああ、それを再レンダリングすることを忘れないでください。あなたのモーダルコードを編集して投稿することで、より良いお手伝いをすることができます。 – Renan

答えて

1

ここmodalPanelの簡易版です。 a4j:logでチェックして、(再レンダリングした)更新されたマークアップがサーバーから送信されたことを確認してください。

ajaxSubmit = true - a4j:supportを使用しているときは、実際には必要ありません。 ajaxSingle = trueおよびa4j:regionは、問題を引き起こしているとは思われません。 - あなたのケースでは同じものです limitToList = true - ページ上の他の領域を更新しないので、これは必要ありません。

+0

修正済み! h:selectOneMenuのa4j:supportタグからlimitList、immediateとajaxSingleを削除しました。私のajax投稿が機能しています!ヘッドアップをありがとう!とても有難い。 –

0

は、あなたのmodalPanelタグの外の形をとってみてくださいajaxSingle = "真:

<a4j:form id="quickAddPaymentForm" ajaxSubmit="true"> 
    <rich:modalPanel id="quickAddPanel"> 
     <div> 

はまたあなたの "quickAddPaymentFormは"

3

使用<h:form>

を入れ子にしてから、次の属性を削除していないことを確認してください"、immediate =" true "

0

f:selectItemsまたはs:selectItemsが生成するHTMLオプションを確認するには、ブラウザからワットページのソース):

<select> 
    <option value="0 ">Select One </option> 
    <option value="id1 ">Choice 1 </option> 
    <option value="id2 ">Choice 2 </option> 
    <option value="id3 ">Choice 3 </option> 
</select> 

その場合は、

<select> 
    <option value="0">Select One</option> 
    <option value="id1">Choice 1</option> 
    <option value="id2">Choice 2</option> 
    <option value="id3">Choice 3</option> 
</select> 

私は末尾のスペースは発射からAjaxのイベントを防ぐことがわかった、サーバー側のコードの末尾の空白を削除したときにa4j:サポートとh:豊富な:modalPanelの外でうまく動作していても、rich:modalPanelの内部で動作するselectOneMenu以下は、動作するサンプルコードです:

<h:form> 
<rich:modalPanel id="myPanel" autosized="true" width="700" showWhenRendered="true"> 
    <table cellpadding="4" cellspacing="2" align="center" width="100%"> 
    <tr> 
    <td align="left"> 
     <h:selectOneMenu styleClass="dropdown" id="dropdownList" 
      value="#{backbean.currentChoice}" 
      valueChangeListener="#{backbean.choiceChanged}" > 
      <f:selectItems value="#{backbean.choiceItems}"></f:selectItems> 
      <a4j:support event="onchange" reRender="whatPicked" ajaxSingle="true" /> 
      </h:selectOneMenu> 
     </td> 
    </tr> 
    <tr> 
     <td> 
     <a4j:outputPanel id="whatPicked"> 
      <h:outputText value="#{backbean.currentChoice }"></h:outputText> 
     </a4j:outputPanel> 
     </td> 
    </tr> 
    </table> 
</rich:modalPanel> 
</h:form> 
関連する問題