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に取り組んでいます