2012-05-03 85 views
-1

請幫我找到解決方案。驗證錯誤值無效:primefaces

這是XHTML代碼:

<p:selectOneMenu value="#{activteBean.act.activiteFamille}" 
    converter="familleAct" 
    var="f" required="Une famille est obligatoire" > 
    <f:selectItems value="#{activteBean.actFamList}" var="famille" itemLabel="#  {famille.dsgFam}" itemValue="#{famille}"/> 
    <p:column>#{f.refFam}</p:column> 
    <p:column>#{f.dsgFam}</p:column> 
</p:selectOneMenu> 

這裏是我的轉換器:

@FacesConverter(forClass=ActiviteFamille.class,value="familleAct") 
public class ActiviteFamilleConverter implements Converter { 

@Override 
public Object getAsObject(FacesContext arg0, UIComponent arg1, String code) { 
    if (code.trim().equals("")) { 
     return null; 
    } else { 
     ActiviteFamilleDao actFamDao = new ActiviteFamilleDao(); 
     List<ActiviteFamille> actFamList = actFamDao.findAll(); 

     for (ActiviteFamille af : actFamList) { 
      if (af.getRefFam().equals(code)) { 
       return af; 
      } 
     } 

    } 
    return null; 
} 

@Override 
public String getAsString(FacesContext arg0, UIComponent arg1, Object value) { 
    if (value == null || value.equals("")) { 
     return ""; 
    } else { 
     return String.valueOf(((ActiviteFamille) value).getRefFam()); 
    } 
} 
} 

管理bean:

@ManagedBean(name = "activteBean") 
@ViewScoped 
public class ActivteBean implements Serializable { 

private Activite act = new Activite(); 
private ActiviteDao actDao = new ActiviteDao(); 
private List<Activite> actList; 
private boolean init; 

private ActiviteFamilleDao actFamDao = new ActiviteFamilleDao(); 
private List<ActiviteFamille> actFamList; 


public boolean isInit() { 
    act = new Activite(); 
    actList = actDao.findAll(); 
    actFamList=actFamDao.findAll(); 
    return init; 
} 
.... 
} 

,感謝你的幫助。

+0

您可以嘗試在轉換器方法中查看發送內容和接收內容。 – lamostreta

+0

你問什麼問題? –

回答

5

如果equals()方法ActiveFamille未正確實施,則會發生這種情況。

錯誤消息指示所選(並已轉換)的值與列表中的任何元素activteBean.actFamList不匹配。

嘗試調試並將斷點設置爲ActiveFamille的equals()方法,並嘗試找出它不匹配的原因。

+0

非常有幫助! 我有同樣的問題,因爲我沒有在我的「ActiveFamille」類中定義equals()方法。 列表中有相應的項目,但Object的默認equals()是通過引用匹配對象,而不是對象屬性。由轉換器生成的ActiveFamille實例當然是一個全新的實例。 – Kangur

+0

就我而言,equals或hashcode上的斷點從來沒有命中! –