いくつかの行を持つデータテーブルがあり、その行のオブジェクトを削除する単純なボタンを持つフォームがある列があります。
最初に作業バージョン:
<h:dataTable value="#{actorTableBackingBean.allActors}"
var="actor" styleClass="table table-bordered">
<h:column headerText="Actor Name" sortBy="#{actor.firstName}">
<h:outputText value="#{actor.firstName}"/>
</h:column>
<h:column headerText="Actor Detail">
<h:form>
<h:commandButton value="Delete Actor"
styleClass="btn btn-primary"
action="#{actorTableBackingBean.deleteActor(actor.actorId)}"/>
</h:form>
</h:column>
</h:dataTable>
deleteActorメソッドは次のようになります。
public String deleteActor(String id){
removeActorWithId(id);
return "/allActors.xhtml";
}
private void removeActorWithId(String id){
int idk = Integer.parseInt(id);
for(Actor a:allActors){
if(a.getActorId() == idk){
allActors.remove(a);
return;
}
}
}
したがって、これはまさに期待どおりに機能します。
ただし、ここに示すように Primefaces のページネーション データ テーブルを使用すると、削除ボタンは 2 番目のケースの FIRST ROW に対してのみ機能し、最初にのみ機能します。他の行の「削除」ボタンをクリックしても、何も起こりません。その理由は何ですか?
2番目の状況では、リンクに見られるように < form > タグを p:dataTable の周りに置き、h:dataTable のようなすべてを p:dataTable や p:column などに置き換えます...