2013-07-19 4 views
2

У меня есть JSF преобразователь со следующим методом:JSF конвертер для не-сохранялось сущности

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

     Actor a = getEjbCasos().getActorByName(value);   
     return a; 
    } 

Это называется из SelectOneMenu:

<h:selectOneMenu id="actores" value="#{crearCasosBean.currentActor}"> 
    <f:selectItem noSelectionOption="true"/> 
    <f:selectItems value="#{crearCasosBean.actorRows}" var="actor" itemLabel="#{actor.name}" itemValue="#{actor}"/> 
    <f:converter binding="#{actorConverter}"/> 
</h:selectOneMenu> 

Вместо того, чтобы выбрать актера, пользователь может введите новые имена актеров, которые создают новый объект Actor, но не сохраняются в базе данных. Это имя Актера затем добавляется в список actorRows, чтобы его можно было выбрать в следующий раз.

Проблема, с которой я сталкиваюсь, заключается в том, что поскольку созданный пользователем Актер не был сохранен в базе данных, когда они выбирают этот Актер, конвертер возвращает null. Я не уверен, как сообщить конвертеру, что эта ссылка должна быть такой же, как у первого Актера.

ответ

3

Вы можете использовать OmniFacesSelectItemsConverter. Он преобразует представленное значение непосредственно на основе доступных значений в <f:selectItems> по умолчанию через представление объекта toString(). Поэтому, если вы можете гарантировать, что вы можете предоставить уникальное представление toString(), тогда этот конвертер должен просто сделать это. Дополнительный бонус заключается в том, что этот конвертер вообще не попадает в БД.

После падения OmniFaces JAR в пути к классам выполнения WebAPP, это просто вопрос

<h:selectOneMenu ... converter="omnifaces.SelectItemsConverter"> 

без каких-либо дополнительных настроек или коды. См. Также the showcase example.

Смежные вопросы