【问题标题】:@Ejb doesn't inject in converter@Ejb 不注入转换器
【发布时间】:2013-11-16 10:31:31
【问题描述】:

我正在尝试编写自己的转换器

我想用 @EJB 将我的 EJB 注入到我的转换器中。 我的 @EJB 在其他我的 ManagedBean 中工作,但在我的转换器中不起作用

@ManagedBean
@ViewScoped

public class ServerTypeConverter implements Converter {

@EJB
private ServerTypeFacade serverTypeFacade;


@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
    if (value == null || value.isEmpty()) {
        return null;
    } else {
        int id = Integer.parseInt(value);
        return serverTypeFacade.findById(id);
    }
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    if (value == null || value.equals("")) {
        return "";
    } else {
        Integer id = ((ServerType) value).getServer_type_id();
        return String.valueOf(id);
    }

}


}

ServerTypeFacade 返回 null。为什么?

这是我使用转换器的方式

<h:selectOneMenu value="#{serverMB.selectedServerType}">
                    <f:converter converterId="serverTypeConverter"/>
                    <f:selectItems value="#{serverMB.serverTypesList}" var="servertypes" itemLabel="#{servertypes.server_type_name}" />
                    <f:ajax listener="#{serverMB.changeServerType}"  render="dd" />


                </h:selectOneMenu>

【问题讨论】:

  • 你如何使用转换器?

标签: jsf ejb converter


【解决方案1】:

转换器中的@EJB 仅在您通过@ManagedBean 将其声明为托管bean 并通过#{serverTypeConverter} 将其用作托管bean 时才有效。

但是,您将转换器用作converterId="serverTypeConverter" 的面孔转换器。显然,您还通过类上的@FacesConverterfaces-config.xml 中的&lt;converter&gt; 将其声明为面部转换器。

这两种声明和使用转换器的方式是互斥的。为了让@EJB 工作,您应该将转换器用作托管bean:

<f:converter binding="#{serverTypeConverter}" />

另见:

【讨论】:

  • 但是当我想使用像 #{serverTypeConverter} 这样的转换器时,我得到这个错误:javax.servlet.ServletException: Expression Error: Named Object: com.mb.ServerTypeConverter@3c37114f not found.
猜你喜欢
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多