2013-04-25 67 views
0

我正在测试我的代码在展示中给出的primefaces收集器示例 我在某处读取其必须覆盖equals和hashcode方法的地方。Primefaces收集器删除不工作

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

请告诉我,什么是错在我的代码

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; 
    } 

} 

的index.xhtml

<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> 
+0

可能会帮助,如果您发布错误 – 2013-04-25 07:41:07

+0

srry,实际上没有错误..但删除链接不工作..只有添加是workin – 2013-04-25 08:44:49

+0

你设法解决这个问题吗?我遇到了同样的问题 – nico1510 2014-08-22 15:45:10

回答

0

该POS t是旧的,但我遇到了同样的问题,一些调试运行后,我发现这个问题与使用转换器或P时正确实现的hashCode等于,:收集你必须实现的hashCode平等来比较您的实体中的所有字段,否则即使您试图删除的项目是正确的,它也会失败。此外,建议您在您的Pojo中覆盖那些属性,而不是在您ManagedBean中。这个职位帮助我了解问题https://blog.art-of-coding.eu/jsf-converters-and-equals-hashcode/