2

私はjsfを初めて使用し、ajaxを使用してテーブルの更新に固執しました。

選択メニューと連動するテーブルが必要です。変更時にテーブルを更新する必要があります。テーブルの列はメニュー値によって異なり、列数は値ごとに異なる場合があります。

私のコード:

<h:form>
        <h:selectOneMenu id="selectOneMenu"  value="#{reservationGuestBean.currentPremiseId}" >
            <f:selectItems value="#{reservationGuestBean.premiseNames}" var="p" itemLabel="#{p.label}" itemValue="#{p.value}" />
            <a4j:ajax event="change" listener="#{reservationGuestBean.premiseChanged}" ajaxSingle="true" render=":currentPremiseId, :reservationsHeading, :reservationsBody" />
        </h:selectOneMenu> 
    </h:form>
    <div><h:outputText id="currentPremiseId" value="PremiseId: #{reservationGuestBean.currentPremiseId}" /></div>
    <table id="reservationsTable">
        <tr>
            <ui:repeat id="reservationsHeading" var="col" value="#{reservationGuestBean.reservationTableHeading}">
                <th>#{col}</th>
            </ui:repeat>
        </tr>
        <ui:repeat id="reservationsBody" var="row" value="#{reservationGuestBean.reservationTableRows}">
            <tr>
                <ui:repeat id="reservationsRowContent" var="cell" value="#{row}">
                    <td>#{cell.value}</td>
                </ui:repeat>
            </tr>
        </ui:repeat>
    </table>

このコードを使用すると、div のコンテンツをリロードできますが、テーブルではなく、見出しもコンテンツもリロードできません。firebug では、必要な応答 (xml を含む) を含む更新要求を確認できますが、選択したテーブル要素は更新されません。

4

1 に答える 1

0

手っ取り早い答えは、テーブルを でラップし、h:panelGroupその ID を の render タグで使用することですa4j:ajax

<h:panelGroup id="myTable">
    <table>
    ...
    </table>
</h:panelGroup>

h:datatableそうは言っても、 を使用して自分でテーブルを再作成するのではなく、コンポーネントの使用方法を学びたいと思うでしょうui:repeat

これは使いやすく、JSF ビューでは意味のあるコンポーネントになりますが、プレーンな HTML テーブルにはありません (そのため、ajax タグで単純に再レンダリングすることはできません)。この記事の例を実行することから始めることができます。

于 2012-07-14T00:46:23.940 に答える