我有一个带有数据表的后续表单和一个带有输入字段的编辑部分来操作表数据。单击命令按钮后,我想刷新数据表:
<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:column 和 ah:commandLink 来更新表格下方编辑器面板中显示的数据。
问题是:为什么要在编辑器面板中为 commandButton 提供 action 属性?如果我没有提供 action 属性,f:ajax render="datatable" 将不会刷新数据表。所以在我看来,这里只能使用 actionListener 来更新后端数据。只有当操作的结果等于当前页面时,操作方法才会起作用。任何人都可以解释这种行为吗?我正在研究 GlassFish 3.1.2