Невозможно выбрать какой-либо элемент из SelectOneMenu

В моей реализации меню выбора появляется с заполненным значением. Но, если я выбрал какой-либо элемент из меню, меню выбора не устанавливает значение и сбрасывает значение по умолчанию.

Преобразователь:

    package com.papar.common.converter;

    import javax.faces.application.FacesMessage;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.RequestScoped;
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.convert.Converter;
    import javax.faces.convert.ConverterException;
    import javax.inject.Inject;

    import org.springframework.stereotype.Component;

    import com.papar.common.domain.Manufacturer;
    import com.papar.common.repository.ManufacturerRepository;

    @Component
    @ManagedBean
    @RequestScoped
    public class ManufacturerConverter implements Converter {

        @Inject
        private ManufacturerRepository repository;

        @Override
        public Object getAsObject(FacesContext context, UIComponent component, String value) {
            if (value == null || value.isEmpty()) {
                return null;
            }

            try {
                return repository.getById(Integer.valueOf(value));
            } catch (Exception e) {
                throw new ConverterException(new FacesMessage(String.format("Cannot convert %s to User", value)), e);
            }
        }

        @Override
        public String getAsString(FacesContext context, UIComponent component, Object value) {
            if (!(value instanceof Manufacturer)) {
                return null;
            }

            return String.valueOf(((Manufacturer) value).getId());
        }

        // ...
    }

JSF:

       <p:column>Manufacturer</p:column>
                               <p:column>
                                  <p:selectOneMenu  converter="com.apt.papar.converter.ManufacturerConverter" value="#{brandBean.manufacturer}">
                                     <f:selectItem itemLabel="Select Manufacturer" itemValue="-1"/>
                                     <f:selectItems value="#{brandBean.manufacturers}" var="manufacturer" itemLabel="#{manufacturer.name}" itemValue="#{manufacturer.id}"/>   

                                  </p:selectOneMenu>

                               </p:column>

Пожалуйста помоги..


person Shashi    schedule 22.05.2013    source источник


Ответы (1)


Устраните три проблемы, упомянутые ниже:

  1. У вас есть аннотации Spring, JSF и CDI вместе. Придерживайтесь одного из них;
  2. Converter="com.apt.papar.converter.ManufacturerConverter" ожидает идентификатор конвертера, заданный аннотацией @FacesConverter: поскольку вы его не используете, вместо этого следует использовать привязку к объекту: converter="#{manufacturerConverter}";
  3. itemValue из тега <f:selectItems> должен указывать на объект, а не на его id: itemValue="#{manufacturer}, иначе ваше использование конвертера будет неверным.

После исправления ваш <p:selectOneMenu> будет работать.

person skuntsel    schedule 22.05.2013