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이다.
아래 코드는 내 프로젝트의 다른 사용자 지정 개체를 사용하여 잘 작동한다는 것을 알아야합니다. Camion은 Bareme과 같은 방식으로 구현되며 변환기는 비슷하며 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>
아무 도움이됩니다. 미리 감사드립니다!
중복 된 http://stackoverflow.com/q/9069379는 언급하지 않은 세 번째 원인을 설명합니다. – BalusC
@BalusC 선택한 항목이 사용 가능한 항목이 아닐 수 있다고 이야기하는 경우 내 항목이 먼저 null이고 내가 볼 수 있듯이 Camion 개체에서 작동하는 값이 null 인 f : selectItem이 추가되었습니다. ManagedBean에서 사용 가능한 목록의 다른 항목을 선택하려고 시도했지만 오류가 여전히 여기에 있습니다. – rvz
어, 나는 null 품목에 대해서 말하고있는 것이 아닙니다. 양식 제출이 실제로 처리되는 순간에 선택된 항목이 더 이상 사용 가능한 항목 목록에 없다는 것입니다. – BalusC