我正在尝试编写一个转换器类,它将在Employee
对象和String之间进行转换(用于显示目的)。最终目标是在表单上有一个SelectOne字段,显示数据库中所有员工编号的列表。
这是我到目前为止所拥有的:
@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,因为它超出了Web内容的“范围”。
我不熟悉在网络上使用Java,而在Java中使用数据库则是新手。有人可以解释我如何使用转换器以这种方式查询我的数据库,并在其中有一个带有员工编号的选择框。
答案 0 :(得分:1)
由于转换器方法包含对FacesContext
的引用,因此您始终可以使用该方法来评估将在问题中返回您的服务的EL表达式。
如果您没有使用任何专用的DataServices
,您可以使用" Helper bean",它只会包含对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;
}
几乎未经测试,但它应该是这样的。