2012-02-20 3 views
1

이 오류가 여러 번 발생했습니다. JSF 페이지, mediaList 및 Unitlist에서 두 개의 h : selectonemenu를 사용하고 있습니다. 모든 미디어를 선택합니다. 내 UnitList가 자동으로 채워지지만 Validation Error : value가 유효하지 않습니다.유효성 검사 오류 :: 값이 Selectone 메뉴에서 유효하지 않습니다.

내 JSF 코드 Mediacombo의

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

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") public class 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를 반환하고 DB와 같은 새 인스턴스를 가져 와서 미디어로 변환하여 String으로 변환하고 있다고 생각하십니까?

이 경우 미디어 클래스는 사용자 정의 같음 및 해시 코드 메서드를 구현해야합니다.

JSF는 사용자가 전송 한 값이 selectitem에 바인딩 한 목록의 값과 일치하는지 비교합니다. 그것은 기본적으로 객체 ID (메모리 참조의 종류)를 비교하는 equals를 사용합니다. 인스턴스가 정확히 인 경우를 제외하고는 항상 false입니다.

equals 메서드를 정의하는 대신, 선택 항목의 출현과 동일한 목록에서 필요한 모델 개체를 변환기에 제공 할 수 있습니다. 이것에 관해서는 http://jdevelopment.nl에 대한 기사가있었습니다.

+1

안녕하세요, 마이크 .. 고맙습니다. 제 문제가 있습니다. 지금 나는 언급 한 기사로 나의 변환기를 바꾸었다. 지금은 잘 작동합니다 ... 고맙습니다. –

관련 문제