3

私はdatatable/ajaxの問題の解決策を見つけようとしています(要するに):

<h:panelGroup layout="block" styleClass="ptl-body" id="toRender">
<h:dataTable value="#{flightMBean.flights}" var="f" id="flight_table" styleClass="table table-striped table-bordered">
    <h:column>
        <f:facet name="header">Airline</f:facet>
        <h:outputText value="#{f.airline.name}"/>
    </h:column>
    ...
    <h:column>
        <f:facet name="header">Status</f:facet>
        <span class="label label-success">Approved </span>
        <sec:authorize ifAnyGranted="ROLE_USER, ROLE_ADMIN">
            <h:form>
                <h:commandButton action="#{userMBean.observeFlight(f.id)}"
                                 styleClass="btn purple" value="Observe">
                    <f:ajax execute="@form" />
                </h:commandButton>
            </h:form>
        </sec:authorize>
    </h:column>
</h:dataTable>

ページネーターのアクション:

<h:form style="margin: 0 0 0 0">
<h:commandButton  styleClass="btn"
                  action="#{flightMBean.previous()}" 
                  rendered="#{flightMBean.paginator.hasPreviousPage}"
                  value="Prev">
    <f:ajax render=":toRender"/>
</h:commandButton>
<h:commandButton styleClass="btn" action="#{flightMBean.next()}" 
                 rendered="#{flightMBean.paginator.hasNextPage}"
                 value="Next">
    <f:ajax render=":toRender"/>
</h:commandButton>

datatable の最初のビュー ページでは、すべてが機能しているようです。[監視] をクリックすると、適切な ID を持つフライトがデータベースに移動します。「次へ」ボタンをクリックすると問題が発生します - データテーブルは新しい行でレンダリングされますが、すべての ID は最初のページと同じです。

たとえば、最初のページではフライトがあります: x から y の 20:00 に id=1 で、別のページは id=2 で、2 番目のページは id=3 の 3 番目のフライトでレンダリングされます。1回目や2回目の飛行を観察したい場合は大丈夫です!3 番目に観測したい場合は、id=1 のフライトがデータベースに移動します。

PS。form/commandButton/jsf コンポーネントなしで #{f.id} だけを配置すると、すべてがうまくいくように見えます... jsf コンポーネントだけでパラメータがリセットされます;/

4

1 に答える 1

0

<h:dataTable value>これは、バッキング Bean がリクエスト スコープであり、 (ポスト) 構築中にまったく同じデータ モデル ( の背後にあるオブジェクト) を保持しない場合に発生します。

Bean をビュー スコープに配置するか、Bean の (ポスト) コンストラクターにロジックを記述して、テーブルを含むフォームがエンドユーザーに提示されたときとまったく同じデータ モデルを保持します。リクエストベースの条件に依存する場合は、<f:param>リクエスト間でそれらを保持するために使用できます。

以下も参照してください。

于 2013-03-13T11:58:11.963 に答える