2014-10-12 3 views
1

Я пытаюсь написать класс конвертера, который будет конвертировать между объектом Employee и String (для отображения). Конечная цель состоит в том, чтобы иметь поле SelectOne в форме, которая отображает список всех номеров сотрудников в базе данных.Доступ к EntityManager из класса JSF Converter

Вот что я до сих пор:

@FacesConverter(value = "employeeConverter") 
public class EmployeeConverter implements Converter { 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String value) { 
     Employee tmp = Helper.findEmployee(em, value); 
     return tmp; 
    } 

    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object value) { 
     Employee tmp = (Employee) value; 
     return tmp.getEMPLOYEE_NUMBER(); 
    } 
} 

Итак, вопрос, который я бегу в том, что Helper класс (который в основном выполняет запросы SQL для меня - я могу включить его в случае необходимости) требует, чтобы Я передаю его EntityManager. Как я выяснил при поиске, я не могу просто включить EntityManager в этот класс, потому что он находится за пределами «области» веб-материала.

Я новичок в использовании Java для Интернета и очень новичок в использовании баз данных с Java. Может кто-то объяснить, как я могу использовать конвертер таким образом, чтобы запрашивать мою базу данных и иметь в нем поле «Выбор» с номерами сотрудников.

ответ

1

Поскольку методы конвертера содержат ссылку на FacesContext, вы всегда можете использовать это для оценки EL-выражения, которое вернет вашу службу в вопросе.

Если вы не используете специальный DataServices, вы можете использовать «Помощник боб», который ничего не делает, но содержат ссылку на EntityManager:

@Named 
public class RandomHelperBean{ 

    @PersistenceContext(unitName = "yourPersistenceContext") 
    EntityManager em; 

    public EntityManager getEm(){ 
     return em; 
    } 
} 

и из вашего преобразователя:

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

    RandomHelperBean rhb= context.getCurrentInstance().getApplication().evaluateExpressionGet(context, "#{randomHelperBean}", RandomHelperBean.class); 
    EntityManager em = rhb.getEm(); 
    Employee tmp = Helper.findEmployee(em, value); 
    return tmp; 
} 

Довольно много непроверенных, но должно быть что-то вроде этого.

+0

Это похоже на то, что сработает. Я дам ей шанс и дам вам знать. Благодаря! – n0pe

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