将 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
现在仍然是 null
。 Converter
本身有效 (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?
我在使用 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
现在仍然是 null
。 Converter
本身有效 (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.
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?