当前位置: 首页 > 知识库问答 >
问题:

PrimeFaces删除DataTable荒谬错误中的一行

狄高畅
2023-03-14

我正在使用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:无法转换模型。Dobavljac[dobavljacID=66]类型的类模型。Dobavljac的班级模型。Dobavljac这很荒谬,因为传递的对象与MB方法“obrisi(Dobavljac d)”中的对象相同。当然,对象永远不会从数据库中删除,因为方法不会被调用。我认为这是一个问题,而不是JSF的问题。

我发现了与此非常相似的示例,并且发现没有人有这种问题(在相同的类之间进行转换),并且不需要实现转换器。

我不确定我是否需要在这个问题上添加更多的信息,我非常感谢你的回答。这很烦人。谢谢!

共有1个答案

谷梁俊楚
2023-03-14
java.lang.IllegalArgumentException: Cannot convert model.Dobavljac[ dobavljacID=66 ]
      of type class model.Dobavljac to class model.Dobavljac

webapp的运行时类路径不干净。模型有多个类文件定义。Dobavljac类,每个类都由不同的类加载器加载。webapp的运行时类路径默认覆盖/WEB-INF/classes中的所有类文件、所有JAR文件/WEB-INF/lib、服务器/lib中的所有JAR文件、JRE的/lib/lib中的所有JAR文件。服务器可以通过特定的配置设置添加其他文件夹。具体的方式和版本取决于服务器的品牌/版本,而您没有透露任何信息。

清理运行时类路径并清除重复的类文件定义(要么是独立的.class文件,要么是包含有问题的.class文件的JAR文件)。重建/重新部署/重新启动后,此问题应消失。

 类似资料:
  • 我正在使用JSF2。0和PrimeFaces3。1和3。1用于业务逻辑。我试图使用DataTable—延迟加载。但它给了我以下的错误。请帮忙。 发生错误:

  • 好家伙们,我有一个Web应用程序,在从PrimeFaces Showcase实现了DataTable之后,我意识到通过点击remove a line,它总是会删除DataTable中的第一行,需要一点帮助。 我的DataTable代码: private ArrayList consultasTemp=new ArrayList(); 详细信息视频:在此输入链接描述

  • 这是完整的代码, 这个问题是荒谬的。与问题相关的链接是:http://www.spoj.com/problems/ABSURD/.我不知道哪个测试用例失败了,我已经尝试了很多。基本上,我们必须减少尾随的零,并根据给定的规则计算荒谬性。然后我们必须确定在给定的范围内是否存在一个整数,其荒谬性小于给定数字的荒谬性。

  • 在上面的例子中,我有3个配置:1。具有p:InputText 2的p:DataTable。h:带有p:InputText 3的DataTable。P:DataTable(带有H:OutputText) 和2个按钮:第一个清除数据,第二个应用数据 工作流: 加载新数据--单击“更新”按钮(假设您正在打开带有新数据的新表单) 问题:为什么带有p:inputtext的p:dataTable仍然存储手动更

  • 我对JSF primefaces 3.1还是个新手。我试图构建一个“复杂”的表,但我无法使用dataTable找到一个好的解决方案(我需要一个排序组件)。 谢谢你

  • 我有一个类似于上面代码的数据表,如你所见,我使用事件RowSelected复选框,有没有办法知道单击的行,并根据该信息完全禁用该行?