将 GlassFish 4.1 升级到 4.1.1 后,@Inject 在@FacesConverter 中不起作用

@Inject doesn't work in @FacesConverter after upgrade GlassFish 4.1 to 4.1.1

我在使用 GlassFish 4.1.1 和 Payara 4.1.153+ 时遇到问题。

POJO 转换器中的 @Inject 点不再起作用。我错过了什么? FacesConverter 有什么变化吗?

@FacesConverter("bkkConverter")
public class BkkConverter implements Converter,Serializable
{

  @Inject
  private BkkBean bkkBean;
  ...
  bkkBean.fetchFromDatabase(...); <- NPE

变量 bkkBean 现在仍然是 nullConverter 本身有效 (getAsObject/getAsString),但没有 @Inject?

它仍然适用于 GlassFish 4.1。

您依赖于 unspecified/undocumented 功能。由于忘记了 experiment/rollback,Mojarra 2.2 在 2.2.9 之前的 @FacesConverter@FacesValidator@FacesComponent 中无意中支持了 @Inject。预计将在 Mojarra 2.3 中提供支持,因此需要一个额外的注释属性,如 @FacesConverter(managed=true) 中所示。另见 a.o。 issue 3552.

在带有 CDI 1.1 的 JSF 2.2 中,您最好的选择是通过 CDI 实用程序 class.

手动获取 bean
BkkBean bkkBean = CDI.current().select(BkkBean.class).get();
// ...

或者,您可以安装 OmniFaces in order to get transparent support for @Inject (and @EJB) in @FacesConverter and @FacesValidator

另请参阅:

  • How to inject @EJB, @PersistenceContext, @Inject, @Autowired, etc in @FacesConverter?