【问题标题】:Converter class getAsObject pass parameter to Service class which accepts object转换器类 getAsObject 将参数传递给接受对象的服务类
【发布时间】:2013-02-07 21:31:36
【问题描述】:

我对 Converter 类 getAsObject 方法有疑问

我有一个服务叫EmployeeService employeeService

public List<Employees> getEmployees(Employees employees);

如果我想从作为参数的 Converter 类的 getAsObject 中调用上述方法

public Object getAsObject(FacesContext facesContext, UIComponent component,
            String value)
    employeeService.getEmployees(<?>)

如何将employees 对象从getAsObject 传递给getEmployees 方法?

非常感谢任何帮助。

更新 1

@Entity
public class Employees implements Serializable {

private String employeeNumber;
private String employeeName;

【问题讨论】:

  • 任务不清楚。什么是Employees 类、错字或带有List&lt;Employee&gt; 的类?你在转换什么以及转换成什么:Employee 基于idDepartmentList&lt;Department,还有别的什么?
  • @skuntsel 我的帖子中有错字,我已更正。我想根据employeeNumber 获取员工。
  • Employees 类是什么?
  • 我的回答能解决你的问题吗?如果没有,请更明确地指定您的要求。

标签: java jsf jsf-2 converter


【解决方案1】:

使用以下转换器,它只是将数字(根据您的代码是 String)转换为 Employee 对象:

@Named("employeeConverter")
public class EmployeeConverter implements Converter {

    @Inject
    private EmployeeService employeeService;

    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if(value == null || value.equals("")) {
            return null;
        }
        Employee employee = employeeService.getEmployeeByNumber(value);//or if it is not a String, replace value with Integer.parseInt(value)
        if(employee == null) {
            throw new ConverterException(new FacesMessage("Employee with number: " + value + " not found."));
        }
        return employee;
    }

    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (!(value instanceof Employee) || (value == null)) {
            return null;
        }
        return ((Employee)value).getEmployeeNumber();
    }

}

并通过converter="#{employeeConverter}"在您的视图中使用它。

【讨论】:

  • 就像我提到的方法参数的类型是Employees' getEmployees(Employees employees)' 所以我必须传递员工对象,而不是字符串
  • Converter interface 仅提供使用签名public Object getAsObject(FacesContext context, UIComponent component, String value); 的方法。该值是一个String 对象。没有什么可做的。然后,您可以通过服务类实例将此字符串转换为对象,就像在答案中一样。也许您需要另一个服务来接受(已经从字符串转换的)对象到别的东西?
  • @Polppan 您想要传递一个Employee 对象,但你不能。正如 skuntsel 所说,您只能在 getAsObject 函数中发送一个 String,其中包含访问 Employee 信息的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多