selectManyMenu Основы конвертера

Я пытаюсь заставить работать selectManyMenu, но у меня проблемы с написанием конвертера для него правильно. Это первый раз, когда мне нужно написать конвертер, чтобы мне все было не так понятно. Я читал в нескольких местах, что я не должен делать никаких обращений к базе данных в конвертере, но как я могу получить объект для некоторого идентификатора в методе getAsObject иначе, чем сделать вызов в БД?

@FacesConverter(value = "converterTest")
public class ConverterTest implements Converter {

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {

    Configuration cfg = new Configuration();
    cfg.configure("hibernate.cfg.xml");
    System.out.println("ID: " + value);

    SessionFactory factory = cfg.buildSessionFactory();

    try {
        Session session = factory.openSession();    
        Equipment e = (Equipment) session.get(Equipment.class, Integer.valueOf(value));
        System.out.println("EQUIPMENT ID : " + e.getId());

        return e;

    } catch(Exception ex) {
        System.out.println("ERROR: " + ex.getMessage());
        return null;
    }

}

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

    if(object != null) {
         System.out.println("ID: " + String.valueOf(((Equipment) object).getId())); 

         return String.valueOf(((Equipment) object).getId());
    }
    else {
        return null;
    }

}

}

ВАЖНЫЙ:

Когда страница загружается, мой selectManyMenu заполняется записями, но я не вижу его имен, только флажки и пустые места вместо имени записи (оборудования). Но, если я попытаюсь поместить некоторые символы в фильтр поиска, это сработает, хотя я вижу только флажки, а не имена. Я добавил itemDescription="#{record.name}" и при наведении указателя мыши на какую-то запись показывается itemDescription. Таким образом, очевидно, что компонент имеет доступ ко всем записям, но его имена не отображаются. Вы можете увидеть снимок экрана на: http://i57.tinypic.com/2wpm2ok.png ("Autoklav" - это название записи, которая не хочет отображаться в списке, но отображается как описание). Это не проблема css, я проверил:)

Это мое selectManyMenu:

   <p:selectManyMenu id="advanced" value="#{pickListView.recordSet}" converter="converterTest"
                  var="t" filter="true" filterMatchMode="contains" showCheckbox="true">
        <f:selectItems value="#{pickListView.allEquipment}" var="record" itemLabel="#{record.name}" itemValue="#{record}" />

        <p:column style="width:90%">
            <h:outputText value="#{record.name}" />
        </p:column>
    </p:selectManyMenu>

Вторая проблема - преобразование String в Object, я не уверен, что мне нужно делать - звонить в БД или нет? В настоящий момент я получаю ошибки, что бы я ни пытался, как правильно получить Object из String (id?)?

Я следовал инструкциям на http://www.primefaces.org/showcase/ui/input/manyMenu.xhtml но не уверен, что я делаю неправильно и почему я не могу показать хотя бы имя записи (getAsString действительно прост, он должен работать)

У кого-нибудь есть предложения или уже есть конвертер для selectManyMenu? Если вам нужна дополнительная информация, я был бы рад дать вам.

Спасибо!

0 ответов

Другие вопросы по тегам