Java Spring@Inject服务类返回空指针异常
我有一个Java Spring@Inject服务类返回空指针异常,java,spring,jsf-2,Java,Spring,Jsf 2,我有一个Converter类,我在其中使用了以下内容,以便使用@Inject访问我的服务类 @Named("myMB") @ViewAccessScoped 但是当我尝试使用 myservice.getCategories(); 我在这一行得到了空指针异常。这可能是什么原因? 我在ManagedBean中使用了相同的服务方法来填充selectOneMenu,但是 在转换器类中使用,给我异常 转换器类 @FacesConverter("categoryConverter") @Named("m
Converter
类,我在其中使用了以下内容,以便使用@Inject
访问我的服务类
@Named("myMB")
@ViewAccessScoped
但是当我尝试使用
myservice.getCategories();
我在这一行得到了空指针异常
。这可能是什么原因?
我在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;
}
@FacesConverter(“类别转换器”)
@命名为(“myMB”)
@ViewAccessScope
公共类CategoryConverter实现转换器{
@注入
类别服务myservice;
@凌驾
公共对象getAsObject(FacesContext FacesContext、UIComponent组件、,
字符串值){
System.out.println(“到达转换器”+值);
试一试{
List cat=myservice.getCategories();
适用于(类别类别:类别){
if(cat.getCategoryCode()==值){
返回猫;
}
}
}
}捕获(例外e){
System.out.println(“来自getAsObject的异常”);
e、 printStackTrace();
}
返回null;
}
如果将其用作@FacesConverter
实例而不是@命名的
实例,则可能发生这种情况。@Inject
在@FacesConverter
上不起作用。摆脱@FacesConverter
以避免将来的混淆,并将转换器引用为converter=“{categoryConverter}”
(使用@Named
)而不是converter=“categoryConverter”
(使用@FacesConverter
)
请注意,我假设弹簧部件配置正确,否则它仍然是
null
。我不做Spring,所以我无法从顶部判断它是否在CDI管理的bean而不是Spring管理的bean中工作。我发现您将CDI和Spring混合在一起,而Spring是CDI/EJB的竞争对手/替代品,这非常令人惊讶和有趣。如果您将它用作@FacesConverter
实例,而不是@命名的实例,则可能会发生这种情况。@Inject
在@FacesConverter
上不起作用。摆脱@FacesConverter
以避免将来的混淆,并将转换器引用为converter=“{categoryConverter}”
(使用@Named
)而不是converter=“categoryConverter”
(使用@FacesConverter
)
请注意,我假设弹簧部件配置正确,否则它仍然是null
。我不做Spring,所以我无法从顶部判断它是否在CDI管理的bean而不是Spring管理的bean中工作。我发现您将CDI和Spring混合在一起,而Spring是CDI/EJB的竞争对手/替代品,这一点非常令人惊讶和有趣。BalusC完全正确。幕后实际发生的事情是,JSF上下文本身将实例化用@FacesConverter注释的类。因为这在Spring上下文之外发生,所以不会注入依赖项。BalusC是绝对正确的。幕后实际发生的事情是,JSF上下文本身将实例化用@FacesConverter注释的类。因为这发生在Spring上下文之外,所以不会注入依赖项。