JSF 2, noSelectionOption с конвертером, не работает должным образом

Я переношу свой проект с seam 2 на JSF 2.x.

В шве 2 для перечислений у нас есть

<s:convertEnum /> 

который вызовет преобразователь, когда будет выбрано правильное значение, а не значение noSelectionOption.

В JSF 2.x я создал свой собственный конвертер, например

@Named("enumConverter")
@ApplicationScoped
public class EnumConverter implements Converter {

public Object getAsObject(FacesContext context, UIComponent component, String key) 
        throws ConverterException {
if(!key.equalsIgnoreCase("-- Choose one --")){
    // DO LOGIC
}
return null;
}

public String getAsString(FacesContext context, UIComponent component, Object object) {
}

Теперь проблема, на мой взгляд, в том, что я использую конвертер, например

<h:selectOneMenu value="#{user.DocumentType}" required="true">
       <f:selectItem itemLabel="-- Choose one --" itemValue="#{null}" noSelectionOption="true"/>
        <f:selectItems value="${user.Constants(user.statuses)}"
            var="Val" itemLabel="#{user.Display(Val)}" 
        />
        <f:converter converterId="enumConverter"></f:converter> 
    </h:selectOneMenu>

Здесь, если я выберу NoSelectionOption, мой преобразователь также будет вызываться, чего не должно происходить, и его следует вызывать только в том случае, если требуется правильное значение.

в случае преобразователя шва 2, только если выбрано правильное значение, тогда будет вызван только преобразователь, в противном случае отображается "требуется значение".

Пожалуйста, скажите мне, что мне здесь не хватает .... Цените и помогайте ...

заранее спасибо


person Rahul Razdan    schedule 03.06.2013    source источник


Ответы (1)


Вышеупомянутая проблема возникла из-за того, что a4j: commandlink имел атрибут reRender, я заменил его атрибутом рендеринга, и теперь отображается сообщение.

Но теперь проблема в том,

*если required=true отсутствует и я выбираю noSelectionOption, тогда в БД будет сохранено пустое значение. необходимо предоставлять валидатор в jsf 2 для noSelectionOption ????

Спасибо

person Rahul Razdan    schedule 04.06.2013