2017-04-07 1 views
1

JSF에서 p : selectOneMenu의 PrimeFaces에 문제가 있습니다. 같은 문제에 대해 많은 질문을 읽었지만 아무런 도움이되지 않았습니다. 나는 내 selectOneMenu의 항목 중 하나를 선택하려고하면, 내 프로젝트에 어디든지 할 때 사용한 것과 동일한 방법으로 내 구성 요소를 설정할 때Primefaces 변환기 및 같음 작업에서 유효성 검사 오류가 발생했습니다.

이 오류가 나타납니다 : 사람들의

Validation Error: Value is not valid

부지를 변환기 클래스 또는 equals() 메서드를 수정하여이 문제를 해결할 수 있지만 광산에서는 아무 문제가 없습니다.

변환기

@RequestScoped 
public class BaremeConverter implements Converter { 

    @EJB 
    private BaremeBean baremeBean; 

    @Override 
    public Object getAsObject(FacesContext fc, UIComponent uic, String value) { 
     if(value != null && value.trim().length() > 0) { 
      try { 
       return baremeBean.loadById(Integer.parseInt(value)); 
      } catch(NumberFormatException e) { 
       return null; 
      } 
     } 
     else { 
      return null; 
     } 
    } 

    @Override 
    public String getAsString(FacesContext fc, UIComponent uic, Object object) { 
     if(object != null) { 
      return String.valueOf(((Bareme) object).getId()); 
     } 
     else { 
      return null; 
     } 
    }  
} 

BaremeBean 데이터 벌금을로드하는이 클래스의 entityBean입니다. 내 작업 공간은 이와 같은 변환기로 가득합니다. 단,이 경우 뭔가를 놓친 경우를 제외하고는 여기에서 작동해야합니다. 클래스 Bareme

@Override 
public boolean equals(Object object) { 
    if (!(object instanceof Bareme)) { 
     return false; 
    } 
    Bareme other = (Bareme) object; 
    return !((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))); 
} 

이의

등호() 메소드() 메소드는 넷빈즈에 의해 생성 등호이며, 아무것도 너무 잘못 여기 보지 않는다.

마지막으로, 내가 사용하는 구성 요소의 코드를 제공하고, 이전 구성 요소와 동일한 코드를 다른 클래스에서 사용할 수 있습니다.

<h:outputLabel for="forfaitBareme" value="Barème" /> 
<p:selectOneMenu id="forfaitBareme" class="print-w100p-lab" value="#{transportFacturationBean.forfait.bareme}" converter="#{baremeConverter}" > 
    <f:selectItem itemLabel="" itemValue="#{null}" /> 
    <f:selectItems value="#{transportFacturationBean.baremesForfait}" var="b" itemLabel="#{b.id}" itemValue="#{b}" /> 
    <p:ajax event="change" update=":centralPanel" process="@form" /> 
</p:selectOneMenu> 

transportFacturationBean.baremesForfait 몇 Bareme를 포함를 java.util.List이다.

아래 코드는 내 프로젝트의 다른 사용자 지정 개체를 사용하여 잘 작동한다는 것을 알아야합니다. CamionBareme과 같은 방식으로 구현되며 변환기는 비슷하며 equals() 메서드는 모두 Netbeans에서 생성 된 것입니다.

<h:outputLabel for="forfaitCamion" value="Camion" /> 
<p:selectOneMenu id="forfaitCamion" class="print-w100p-lab" value="#{transportFacturationBean.forfait.camion}" converter="#{camionConverter}" > 
    <f:selectItem itemLabel="" itemValue="#{null}" /> 
    <f:selectItems value="#{transportFacturationBean.camions}" var="c" itemLabel="#{c.type}" itemValue="#{c}" /> 
    <p:ajax event="change" update=":centralPanel" process="@form" /> 
</p:selectOneMenu> 

아무 도움이됩니다. 미리 감사드립니다!

+0

중복 된 http://stackoverflow.com/q/9069379는 언급하지 않은 세 번째 원인을 설명합니다. – BalusC

+0

@BalusC 선택한 항목이 사용 가능한 항목이 아닐 수 있다고 이야기하는 경우 내 항목이 먼저 null이고 내가 볼 수 있듯이 Camion 개체에서 작동하는 값이 null 인 f : selectItem이 추가되었습니다. ManagedBean에서 사용 가능한 목록의 다른 항목을 선택하려고 시도했지만 오류가 여전히 여기에 있습니다. – rvz

+0

어, 나는 null 품목에 대해서 말하고있는 것이 아닙니다. 양식 제출이 실제로 처리되는 순간에 선택된 항목이 더 이상 사용 가능한 항목 목록에 없다는 것입니다. – BalusC

답변

1

솔트! 가장 작은 내가 상상할 수있는 실수!

return baremeBean.loadById(Integer.parseInt(value)); 

loadById 방법은 .... 간단한 객체 대신 죄송들 목록을 반환했다!

관련 문제