フォームにテーブルがあります。テーブルの列の 1 つに、テーブル エントリを編集および削除するためのボタンの行が表示されます。action
ボタンの属性からコントローラをコールするエントリを削除すると、期待どおりに動作します。
しかし、ユーザーが削除を確認できるダイアログを追加すると、間違ったエントリが削除されます。これは、常に現在のテーブルの最後のエントリです。理由がわかりませんDataTable
var
。ボタンとダイアログに同じものを使用しています。
私は JSF 2 (Mojarra 2.1.6) と Primefaces 3.5 を Suse 12.2 マシンの JBoss 7.1.1 にデプロイして作業しています。
フォーム:
<h:form id="downloads">
<ui:include src="components/table.xhtml"/>
</h:form>
テーブル:
<ui:composition>
<p:dataTable value="#{controller.currentLevelResources}"
var="download" id="downloadTable" scrollHeight="120" rows="10">
<p:column sortBy="#{download.name}">
<f:facet name="header">Name</f:facet>
<h:outputText id="downloadName" value="#{download.name}" title="#{download.description}" />
</p:column>
...
<p:column>
<ui:include src="menuBar.xhtml"></ui:include>
</p:column>
メニューバー:
<ui:composition>
<p:commandButton id="edit"
action="#{downloadEditController.editResource(download)}"
icon="ui-icon-gear" title="Edit" oncomplete="updateStyles()"
update=":downloads" />
<p:commandButton id="delete" onclick="deletedDlg.show();"
icon="ui-icon-trash" title="Delete" oncomplete="updateStyles()" />
<p:dialog header="Delete confirmation" widgetVar="deletedDlg"
resizable="false">
<h:panelGroup layout="block" style="padding:5px;">
<h:outputText
value="The Resource #{download} will be deleted. Proceed?" />
</h:panelGroup>
<p:commandButton id="deleteBtn" value="Delete"
oncomplete="deletedDlg.hide(); updateStyles(); "
action="#{downloadEditController.deleteResource(download)}"
process="@this" update=":downloads">
</p:commandButton>
<p:commandButton value="Cancel" type="button"
onclick="deletedDlg.hide();" />
</p:dialog>
ダイアログをこれに置き換えると、すべてが機能します。
<p:commandButton id="delete" icon="ui-icon-trash" title="Delete"
action="#{downloadEditController.deleteResource(download)}"
oncomplete="updateStyles()" update=":downloads" />