Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 PrimeFaces从DataTable中删除行时出错_Jsf 2_Primefaces_Datatable_Managed Bean - Fatal编程技术网

Jsf 2 PrimeFaces从DataTable中删除行时出错

Jsf 2 PrimeFaces从DataTable中删除行时出错,jsf-2,primefaces,datatable,managed-bean,Jsf 2,Primefaces,Datatable,Managed Bean,我正在使用DataTable组件,我非常简单的目标是使用内联命令按钮删除一行。这是dataTable组件的代码 <p:dataTable rowKey="#{dobavljac.dobavljacID}" value="#{dobavljacMB.vratiDobavljace()}" var="dobavljac" > <p:column> <f:facet name="header">

我正在使用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";
    }


    }
/**
*创建DobavljacMB的新实例
*/
私人杜巴瓦贾克·特库西;
公共杜巴瓦贾克·盖特库西(){
返回特库西;
}
公共空间塞特库奇(Dobavljac tekuci){
this.tekuci=tekuci;
}
公共多巴夫雅克姆(){
}
公共字符串prikazDobavljaca(){
System.out.println(“Prikaz dobavljaca”);
//System.out.println(“podaci su:+tekuciKorisnik.getKorisnickoIme());
FacesContext.getCurrentInstance().addMessage(空,新的FacesMessage(FacesMessage.SEVERITY_错误,“Ne postoji korisnik sa tim korisnickim imenom i sifrom!”,“”);
返回null;
}
公开名单vratiDobavljace(){
返回KonekcijaDB.vratiInstancu().vratiDobavljace();
}
公共字符串obrisi(Dobavljac d){
试一试{
System.out.println(“obrisi”);
KonekcijaDB.vratiInstancu().obrisi(d);
FacesContext.getCurrentInstance().addMessage(空,新的FacesMessage(FacesMessage.SEVERITY_INFO,“Dobavljac obrisan”和“”);
返回“prikazDobavljaca.xhtml”;
}捕获(例外e){
FacesContext.getCurrentInstance().addMessage(空,新的FacesMessage(FacesMessage.SEVERITY_错误,“Greska pri brisanju”和“”);
返回“prikazDobavljaca.xhtml”;
}
}
Dobavljac类是一个简单的POJO类,由IDE生成,因此无需发布它。问题是,当调用该方法时,它抛出一个 java.lang.IllegalArgumentException:无法将class model.Dobavljac[dobavljacID=66]类型的model.Dobavljac转换为class model.Dobavljac,这非常荒谬,因为传递的对象与MB方法“obrisi(Dobavljac d)”中的对象相同。 当然,对象永远不会从数据库中删除,因为方法不会被调用。我的想法是这是一个PrimeFaces问题,而不是JSF的问题

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

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

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


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

感谢您的快速响应!我仔细检查了我所有的文件夹/包中的双类条目,但事实并非如此。我忘了提到我正在使用GlassFish 3+,我只配置了使用特定的数据库连接,没有额外的文件夹。在多次重建、部署和取消部署操作后,问题(最终)消失了。我遇到的例外不容易理解。另外,作为初学者,我有一个简短的问题:在更改代码或添加新的lib、资源时,在NetBeans中“运行”、部署、构建等的最佳实践是什么。。?再次感谢!显然它在Netbeans或Glassfish缓存中的某个地方。抱歉,我不能代表Netbeans说话,我只是使用Eclipse(使用JRebel来加速热部署)。@BorkoS您可以使用Netbeans的热部署属性来查看浏览器中代码的更改。为此,右键单击netbeans项目并选择properties。从“属性”窗格中,选择“生成”菜单下的“编译”菜单。从该菜单中,为属性“保存时编译”选择“用于应用程序和测试执行”。这将使netbeans能够在每次保存后将您的更改部署到glassfish服务器。@cubbuk谢谢您的建议,我已经在使用该选项了。显然,我有一个坏习惯,就是在整个项目中点击“Run”,我认为这会将所有内容传输到服务器,而不仅仅是差异。我最近刚开始使用JavaEE,从普通的桌面应用程序迁移过来。欢迎=),在开发过程中要小心javascript文件和css文件。因为当您对这些文件进行更改时,有时您需要清理浏览器的缓存以查看更改,而当您需要处理javascript时,这些更改会变得非常烦人。
java.lang.IllegalArgumentException: Cannot convert model.Dobavljac[ dobavljacID=66 ]
      of type class model.Dobavljac to class model.Dobavljac