2

壁にぶち当たりました。私は a4j とリッチタグについてよく知っています (私は Seam 2.2.0 と Richfaces 3.3.1 を使用しています)。ただし、非常に単純なことをしようとしていますが、rich:modalPanel で行います。

rich:modalPanels では Ajax イベントの発生が許可されていないようです。簡単な内訳は次のとおりです。いくつかのアイテムを含む ah:selectOneMenu があり、その値はバッキング Bean にアタッチされています。その h:selectOneMenu には a4j:support タグが添付されているため、変更イベントが発生するたびにバッキング Bean が更新されます。本当に単純なことですよね?

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

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

質問は、rich:modalPanel 内で Ajax を実行できるかどうかです。私は基本的にリッチ:モーダルパネルをフォームとして使用しようとしています (私は a4j:form と h:form を無駄に試しました)。フォームの一部が再レンダリングされる必要があります)。私は不可能なことをしようとしていますか?

modalPanel の簡易バージョンを次に示します。

<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>

よろしく、アンディ

4

4 に答える 4

3

使用する<h:form>

次の属性を次の属性から削除します:ajaxSingle = "true"、immediate = "true"

于 2011-01-17T06:56:19.923 に答える
1

動作するはずです。更新されたマークアップ(再レンダリング)がサーバーから送信されていることをa4j:logで確認します。私はそれが問題を引き起こすとは思わないが、あなたはあなたのコードでいくつかのことを変えることができる:

ajaxSubmit = true-a4j:support ajaxSingle = trueとa4j:regionを使用するので、実際には必要ありません-あなたの場合は同じですlimitToList = true-他を更新しないので、必要ありませんページ上の領域。

于 2011-01-11T19:21:25.153 に答える
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>

a4j:support と h:selectOneMenu が rich:modalPanel の内部で動作している場合、Rich:modalPanel の外部では正常に動作していても、末尾のスペースによって Ajax イベントが発生しないことがわかりました。動作するサンプル コードを次に示します。

<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>
于 2013-09-11T16:34:35.073 に答える
0

modalPanel タグの外側でフォームを取得してみてください。

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

また、「quickAddPaymentForm」がネストされていないことを確認してください

于 2011-01-12T17:56:52.110 に答える