2012-05-03 16 views
-1

解決策を見つけるのを手伝ってください。検証エラーの値が無効です:primfaces

これは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

ActiveFamilleequals()メソッドが正しく実装されていない場合に発生する可能性があります。

エラーメッセージは、選択した(変換した)値がリスト内のいずれの要素とも一致しないことを示しますactivteBean.actFamList

デバッグし、ブレークポイントをequals()メソッドActiveFamilleに設定し、それが一致しない理由を調べてみます。

+0

とても役立ちます! "ActiveFamille"クラスにequals()メソッドを定義していないため、同じ問題が発生しました。 対応する項目がリストにありましたが、オブジェクトのデフォルトのequals()は、オブジェクトプロパティではなく参照によって一致していました。コンバータによって生成されたActiveFamilleのインスタンスは完全に新しいインスタンスでした。 – Kangur

+0

私の場合、equalsまたはhashcodeのブレークポイントは決して命中しません! –