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? Если вам нужна дополнительная информация, я был бы рад дать вам.
Спасибо!