私はDataTableコンポーネントを使用していますが、非常に簡単な目標は、インラインコマンドボタンを使用して行を削除することです。これは、dataTableコンポーネントのコードです。
<p:dataTable rowKey="#{dobavljac.dobavljacID}" value="#{dobavljacMB.vratiDobavljace()}" var="dobavljac" >
<p:column>
<f:facet name="header">ID</f:facet>
<h:outputText value="#{dobavljac.dobavljacID}" />
</p:column>
<p:column>
<f:facet name="header">Naziv</f:facet>
<h:outputText value="#{dobavljac.naziv}" />
</p:column>
<p:column>
<f:facet name="header">Adresa</f:facet>
<h:outputText value="#{dobavljac.adresa}" />
</p:column>
<p:column colspan="2" style="text-align: center">
<f:facet name="header">Operacija</f:facet>
<p:commandButton id="viewButton" style="height: 35px" value="Delete" action="#{dobavljacMB.obrisi(dobavljac)}" ajax="false"/>
</p:column>
</p:dataTable>
「dobavljac」は、action = "#{dobavljacMB.obrisi(dobavljac)}"を使用して削除する必要があるエンティティです。
削除機能「obrisi」を持つマネージドBeanクラスは次のとおりです。
/**
* Creates a new instance of DobavljacMB
*/
private Dobavljac tekuci;
public Dobavljac getTekuci() {
return tekuci;
}
public void setTekuci(Dobavljac tekuci) {
this.tekuci = tekuci;
}
public DobavljacMB() {
}
public String prikazDobavljaca() {
System.out.println("Prikaz dobavljaca");
// System.out.println("podaci su:"+tekuciKorisnik.getKorisnickoIme());
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ne postoji korisnik sa tim korisnickim imenom i sifrom!", ""));
return null;
}
public List<Dobavljac> vratiDobavljace() {
return KonekcijaDB.vratiInstancu().vratiDobavljace();
}
public String obrisi(Dobavljac d){
try {
System.out.println("obrisi");
KonekcijaDB.vratiInstancu().obrisi(d);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Dobavljac obrisan", ""));
return "prikazDobavljaca.xhtml";
} catch (Exception e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Greska pri brisanju", ""));
return "prikazDobavljaca.xhtml";
}
}
Dobavljacクラスは、IDEによって生成された単純なPOJOクラスであるため、投稿する必要はありません。問題は、メソッドが呼び出されると、 java.lang.IllegalArgumentExceptionがスローされることです。クラスmodel.Dobavljac型のmodel.Dobavljac [dobavljacID = 66]を、渡されたオブジェクトがMBメソッド「obrisi(Dobavljacd)」と同じです。もちろん、メソッドが呼び出されないため、オブジェクトがDBから削除されることはありません。私の考えでは、これはPrimeFacesの問題であり、JSFの問題ではありません。
これに非常によく似た例を見つけましたが、この種の問題(同じクラス間の変換)はなく、コンバーターを実装する必要がないことがわかりました。
質問にさらに情報を追加する必要があるかどうかはわかりません。回答をいただければ幸いです。とても迷惑です。ありがとう!