Jsf 2 Primefaces收集器移除不工作

Jsf 2 Primefaces收集器移除不工作,jsf-2,collections,primefaces,Jsf 2,Collections,Primefaces,我正在测试Showcase中为我的代码提供的primefaces收集器示例 我在某处读到有必要为此重写equals和hashcode方法 即使重写了这些方法,我仍然会得到相同的错误 请告诉我我的代码出了什么问题 User.java @ManagedBean public class User implements Serializable{ public String name; public String designation; pu

我正在测试Showcase中为我的代码提供的primefaces收集器示例 我在某处读到有必要为此重写equals和hashcode方法

即使重写了这些方法,我仍然会得到相同的错误

请告诉我我的代码出了什么问题

User.java

  @ManagedBean
  public class User implements Serializable{

        public String name;
        public String designation;
        public String division;

public User(String name,String division){
   setName(name);
   setDivision(division);
}
public User(){

}

public String getDesignation() {
    return designation;
}

public void setDesignation(String designation) {
    this.designation = designation;
}


public String getDivision() {
    return division;
}

public void setDivision(String userDivision) {
    this.division = userDivision;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}

}
commApprover.java

@ManagedBean
@ViewScoped
public class CommApprover implements Serializable{

private User approver = new User();

private List<User> approvers = new ArrayList<User>();

public String reinit() {
    approver = new User();

    return null;
}

public User getApprover() {
    return approver;
}

public void setApprover(User approver) {
    this.approver = approver;
}

public List<User> getApprovers() {
    return approvers;
}

public void setApprovers(List<User> approvers) {
    this.approvers = approvers;
}

@Override
public boolean equals(Object o) 
{ 
    if (this == o) 
        return true; 
    if (o == null || getClass() != o.getClass()) 
        return false; 
     if (approver!= null ? !approver.equals(this.approver) : this.approver != null) 
         return false;

     return true; 
 }  

     @Override 
     public int hashCode() 
     { 
         int result = approver.hashCode(); 

         return result; 
     } 

}
@ManagedBean
@视域
公共类CommApprover实现可序列化{
私人用户审批人=新用户();
私有列表审批人=新建ArrayList();
公共字符串reinit(){
审批人=新用户();
返回null;
}
公共用户getApprover(){
返回批准人;
}
公共审核人(用户审核人){
this.approver=批准人;
}
公共列表getApprovers(){
返回批准人;
}
公共审批人(列出审批人){
this.approvers=批准人;
}
@凌驾
公共布尔等于(对象o)
{ 
if(this==o)
返回true;
如果(o==null | | getClass()!=o.getClass())
返回false;
if(approver!=null?!approver.equals(this.approver):this.approver!=null)
返回false;
返回true;
}  
@凌驾
公共int hashCode()
{ 
int result=approver.hashCode();
返回结果;
} 
}
index.xhtml



这篇文章很旧,但我遇到了同样的问题,经过一些调试后,我发现这个问题与hashCode和hashCode的错误实现有关,使用转换器或p:collector时,您必须实现hashCodeequals来比较实体中的所有字段,否则即使您尝试删除的项目是正确的,也会失败。此外,建议您重写Pojo中而不是ManagedBean中的那些属性。这篇文章帮助我理解了这个问题

如果你发布了错误,可能会有所帮助。请注意,实际上没有错误。但是删除链接不起作用。。只有添加工作项才能解决此问题?我遇到了同样的问题
<p:growl id="msgs" />

<p:panel header="Approval Route ">
        <h:panelGrid columns="3" id="grid">
            <h:outputText  value="Name*" />
  <h:outputText value="Designation*" />
<h:outputText value="Division*" />

<p:inputText id="app_name" value="#{commApprover.approver.name}" required="true"/>
<p:inputText id="app_designation" value="#{commApprover.approver.designation}"     required="true"/>
<p:inputText id="app_division" required="true" value="#    {commApprover.approver.division}" />


<p:commandButton id="btn_add" value="Add" update="approvers @parent" action="#{commApprover.reinit}" >
<p:collector value="#{commApprover.approver}"  addTo="#{commApprover.approvers}" />
</p:commandButton>

</h:panelGrid>

</p:panel>

<p:outputPanel id="approvers">
<p:dataTable id="approversTable" value="#{commApprover.approvers}" var="approver">

<p:column>
<f:facet name="header">
    <h:outputText value="Name" />
</f:facet>
<h:outputText value="#{approver.name}" />
</p:column>

<p:column>
<f:facet name="header">
<h:outputText value="Designation" />
</f:facet>
<h:outputText value="#{approver.designation}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Division" />
</f:facet>
<h:outputText value="#{approver.division}" />
</p:column>

<p:column>
<f:facet name="header">
<h:outputText value="Operation" />
</f:facet>
<p:commandLink ajax="true" value="Remove" update=":appform:approvers" process=":appform:approvers">
<p:collector  value="#{approver}" removeFrom="#{commApprover.approvers}" />
</p:commandLink>
</p:column>
</p:dataTable>
</p:outputPanel>

   </h:form>