我有一个Converter
类,我使用了以下内容,以便我可以使用@Inject
来访问我的服务类。
@Named("myMB")
@ViewAccessScoped
但是当我尝试使用
时myservice.getCategories();
我在这一行得到null pointer exception
。这可能是什么原因?
我在ManagedBean
中使用了相同的服务方法来填充selectOneMenu
,但是何时填充@FacesConverter("categoryConverter")
@Named("myMB")
@ViewAccessScoped
public class CategoryConverter implements Converter {
@Inject
CategoryService myservice;
@Override
public Object getAsObject(FacesContext facesContext, UIComponent component,
String value) {
System.out.println("reached in converter "+value);
try {
List<Category> cat = myservice.getCategories();
for (Category cat : category) {
if (cat.getCategoryCode() == value) {
return cat;
}
}
}
} catch (Exception e) {
System.out.println("exception from getAsObject ");
e.printStackTrace();
}
return null;
}
在Converter类中使用,给我例外。
转换器类
{{1}}
答案 0 :(得分:3)
如果您将其用作@FacesConverter
实例而不是@Named
实例,则会发生这种情况。 @Inject
无效@FacesConverter
。摆脱@FacesConverter
以避免将来混淆,并将转换器引用为converter="#{categoryConverter}"
(使用@Named
)而不是converter="categoryConverter"
(使用@FacesConverter
)。< / p>
请注意,我假设Spring部分已正确配置,否则它仍然是null
。我不做Spring,所以如果它在CDI托管bean而不是Spring托管bean中运行,我无法告诉表单顶部。我发现将CDI和Spring混合起来只是令人惊讶和有趣,而Spring则是CDI / EJB的竞争对手/替代品。