This question already has answers here:
How to inject @EJB, @PersistenceContext, @Inject, @Autowired, etc in @FacesConverter?
(5个答案)
4年前关闭。
我写了一个转换器。我正在使用CDI和并行注入。在这种情况下,不会注入类。如何使注射成为可能?
您只需要更改视图中引用它的方式即可。您不能再依赖
要么
如果确实需要使
JSF团队已经证实了这种令人尴尬的监督,他们将使
也可以看看:
How to inject @EJB, @PersistenceContext, @Inject, @Autowired, etc in @FacesConverter?
如果您刚巧使用JSF实用程序库OmniFaces,或者对它开放使用,请进行更新,从1.6版开始,当
(5个答案)
4年前关闭。
我写了一个转换器。我正在使用CDI和并行注入。在这种情况下,不会注入类。如何使注射成为可能?
@FacesConverter(forClass = MyClass.class)
public class MyConverter implements Converter{
@EJB
private ClassForEJB classForEJB;
@Inject
private ClassForInject classForInject;
// Converter Methods
}
最佳答案
@FacesConverter
不是合格的注入目标。用@ManagedBean
或@Named
替换它。您也想使用CDI,请使用@Named
。
@Named
@ApplicationScoped // I assume that your converter doesn't have any state.
public class MyConverter implements Converter {
// ...
}
您只需要更改视图中引用它的方式即可。您不能再依赖
forClass
。您需要将其明确指定为#{myConverter}
。<h:inputSomething ... converter="#{myConverter}" />
要么
<h:inputSomething ...>
<f:converter binding="#{myConverter}" />
</h:inputSomething>
如果确实需要使
@FacesConverter
优先于forClass
,那么您需要通过JNDI手动获取EJB。 this blog article中显示了一个具体示例。但是对于CDI bean,我不能说清楚。JSF团队已经证实了这种令人尴尬的监督,他们将使
@FacesConverter
在即将发布的JSF 2.2中成为合格的注入目标,另请参见JSF spec issue 763 JSF 2.3。也可以看看:
How to inject @EJB, @PersistenceContext, @Inject, @Autowired, etc in @FacesConverter?
如果您刚巧使用JSF实用程序库OmniFaces,或者对它开放使用,请进行更新,从1.6版开始,当
/WEB-INF/lib
中只有OmniFaces JAR时,Web应用程序中的所有@FacesConverter
(和@FacesValidator
) automatically无需任何额外的努力就可以进行CDI和EJB注入。关于jsf - 如何注入(inject)@FacesConverter? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13156671/
10-10 22:44