我正在使用 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 类是一个简单的 POJO 类,由 IDE 生成,所以不需要贴出来。问题是,当调用该方法时,它会抛出一个 java.lang.IllegalArgumentException: Cannot convert model.Dobavljac[ dobavljacID=66 ] of type class model.Dobavljac to class model.Dobavljac这很荒谬,因为传递的对象是与 MB 方法“obrisi(Dobavljac d)”中的方法相同。当然,对象永远不会从数据库中删除,因为没有调用该方法。我的想法是这是一个 PrimeFaces 问题,而不是 JSF 问题之一。
我找到了和这个非常相似的例子,发现没有人遇到过这种问题(相同类之间的转换),不需要实现转换器。
我不确定是否需要在问题中添加更多信息,我将非常感谢您的回答。这很烦人。谢谢!