JSF SelectOneMenu не работает без конвертера? - PullRequest
0 голосов
/ 09 октября 2018

Итак, у меня есть следующий код xhtml:

<p:cellEditor>
        <f:facet name="output">
                    <h:outputText value="#{interview.interviewer.name}" />
                </f:facet>
                <f:facet name="input">
                    <p:selectOneMenu value="#{interview.interviewer}" style="width:100%" converter="interviewerConverter">
                        <f:selectItems value="#{interviewerController.allInterviewers}" var="s" itemLabel="#{s.name}" itemValue="#{s}" />
                    </p:selectOneMenu>
        </f:facet>
</p:cellEditor>

Когда я пытаюсь редактировать данные в ячейке, я получаю следующую ошибку:

Conversion Error setting value 'com.jpa.entities.Interviewer@288002c2' for 'null Converter'.

Я посмотрелна подобных постах, но не выяснил, что здесь не так.

Также я создал следующий конвертер, с этим я не получаю ошибку конвертера :

@FacesConverter("interviewerConverter")
public class InterviewerConverter implements Converter {

public Object getAsObject(FacesContext fc, UIComponent uic, String value) {
    if(value != null && value.trim().length() > 0) {
        try {
            InterviewerController service = (InterviewerController) fc.getExternalContext().getApplicationMap().get("interviewerController");
            return service.getallInterviewers().get(Integer.parseInt(value));
        } catch(NumberFormatException e) {
            throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid"));
        }
    }
    else {
        return null;
    }
}

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

После реализации конвертера я получаю исключение NullPointerException в следующем списке: (service.getallInterviewers ())

 return service.getallInterviewers().get(Integer.parseInt(value));

, но в контроллере список инициализируется следующим образом:

@PostConstruct
public void init(){
    initAllInterviewers();
}

Что тут не так?

...