0

dataTable を含む次のフォームと、テーブル データを操作するための入力フィールドを含む編集セクションがあります。commandButton がクリックされた後にデータテーブルを更新したい:

<f:ajax>
<h:panelGroup id="timesheet_panel">
    <h:dataTable id="datatable"
            value="#{timesheetController.myTimeSheet}" var="child">
    ......
        <h:column>
        <!-- update editor panel data -->
        <h:commandLink
            action="#{timesheetController.load(child.item['$uniqueid'])}">
                    <h:outputText value="#{message.edit}" />
            <f:ajax
                render=":#{component.parent.parent.parent.parent.clientId}:editorpanel" />
        </h:commandLink>
    </h:column>

    </h:dataTable>

    <!-- Editor  -->
    <h:panelGroup id="editor">
        <h:inputText value="#{timesheetController.workitem.item['_category']}" />

        <h:commandButton action="/mypage"
                    actionListener="#{timesheetController.process('10')}"
            value="Update Tabledata">
            <f:ajax render="datatable" />
        </h:commandButton>
    </h:panelGroup>
</h:panelGroup>
</f:ajax>

注: テーブルの下のエディター パネルに表示されるデータを更新するために、ah:commandLink を含む ah:column があります。

問題は、エディタ パネルで commandButton に action プロパティを提供する必要があるのはなぜですか? action プロパティを指定しなかった場合、 f:ajax render="datatable" はデータテーブルを更新しません。したがって、ここでは actionListener のみを使用してバックエンド データを更新できるように思えます。アクション メソッドは、アクションの結果が現在のページと等しい場合にのみ機能します。誰でもこの動作を説明できますか? 私はGlassFish 3.1.2に取り組んでいます

4

1 に答える 1

0

テーブルを更新するには、Beanを少なくとも@ViewScopedに配置する必要があります。そうしないと、値が設定された後にビードが再作成されるため、同じポイントに到達します。

于 2012-11-18T10:04:04.583 に答える