2012-02-20 19 views
1

私はこのエラーが発生しました。私はJSFページ、mediaList、Unitlistの2つのh:selectonemenuを使用しています。任意のメディアを選択します。私のUnitListは自動的に設定されますが、Validation Error:valueは無効です。Validation Error :: ValueはSelectoneメニューで有効ではありません

私のJSFコード

<h:selectOneMenu id="media" value="#{workOrderMbean.selectedMedia}" converter="MediaConverter" onchange="submit()" valueChangeListener="#{workOrderMbean.onChangeMediaCombo}" immediate="true"> 
    <f:selectItems value="#{workOrderMbean.mediaCombo}"/> 
</h:selectOneMenu> 

<h:selectOneMenu id="hUnit" value="#{workOrderMbean.selectedHeightUnit}" converter="UnitConverter" > 
    <f:selectItems value="#{workOrderMbean.unitCombo}"/> 
</h:selectOneMenu> 

Mediacomboのonchaneイベントは、私も 'ユニット'

私のメディアコンバータは、(

@FacesConverterであるため、コンバータを使用しています

public void onChangeMediaCombo(ValueChangeEvent e) throws SearchBLException { 

     if (e.getNewValue() != null) { 
      Media media = (Media) e.getNewValue(); 
      if (unitCombo != null && !unitCombo.isEmpty()) { 
       unitCombo.clear(); 
       seclectedWidthUnit=new Unit(); 
       selectedHeightUnit=new Unit(); 
      } 
      unitCombo = ComboLoader.getUnitsComboByMediaid(media.getMediaId()); 
     } 
     else 
     { 
      if (unitCombo != null && !unitCombo.isEmpty()) { 
       unitCombo.clear(); 
       seclectedWidthUnit=null; 
       selectedHeightUnit=null; 
      } 
      unitCombo = ComboLoader.getUnitsComboByMediaid(-1); 
     } 
    } 

です値= "MediaConverter") パブリッククラスMediaConverterコンバータ{

MediaDAO mediadao=new MediaDAOImpl(); 

public Object getAsObject(FacesContext context, UIComponent component, String value) { 
    Media media=null; 
    try { 
     media=mediadao.getMedia(Integer.parseInt(value)); 
    } catch (SearchBLException ex) { 
     Logger.getLogger(MediaConverter.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return media; 
} 

public String getAsString(FacesContext context, UIComponent component, Object value) { 
    String str = ""; 
if (value instanceof Media) { 
    str = "" + ((Media) value).getMediaId(); 
} 
return str; 
} 

}

+2

"plz help me .."私はあなたがここではそれを思い出すことができると思います。あなたはインドの街で乞食ではありませんか?) –

答えて

4

問題は、あなたのコンバータとモデルクラス(メディア)で最も可能性が高い実装します。

変換を正確に行う方法はわかりませんが、メディアのIDを返してStringに変換していて、DBのような場所から新しいインスタンスを取得してMediaに変換すると思いますか?

この場合、Mediaクラスはカスタムequalsメソッドとhashcodeメソッドを実装する必要があります。

JSFは、ユーザーが送信する値が選択項目にバインドしたリストの値と一致するかどうかを比較します。これは、オブジェクトID(メモリ参照の種類)をデフォルトで比較するequalsを使用します。 のインスタンスがの場合を除き、常にfalseになります。

equalsメソッドを定義する代わりに、選択項目が出ているものと同じリストから必要なモデルオブジェクトをコンバーターに渡すこともできます。これについては、http://jdevelopment.nlに関する記事がありました。

+1

こんにちはマイク..ありがとうございました。今私は述べたように私のコンバータを変更しました。今は正常に動作しています..ありがとう、ありがとう –

関連する問題