0

我有一个Converter类,我使用了以下内容,以便我可以@Inject用来访问我的服务类。

@Named("myMB")
@ViewAccessScoped

但是,当我尝试使用

myservice.getCategories();

我正在null pointer exception这条线上。这可能是什么原因?我使用了相同的服务方法ManagedBean来填充selectOneMenu,但是当在 Converter 类中使用时,给了我异常。

转换器类

@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;
        }
4

1 回答 1

3

如果您将其用作@FacesConverter实例而不是实例,则可能会发生这种@Named情况。对@Inject不起作用@FacesConverter。摆脱@FacesConverter以避免将来的混淆并将转换器引用为converter="#{categoryConverter}"(使用@Named)而不是converter="categoryConverter"(使用@FacesConverter)。

请注意,我假设 Spring 部分已正确配置,否则它将仍然是null. 我不使用 Spring,所以如果它在 CDI 托管 bean 而不是 Spring 托管 bean 中工作,我无法判断它是否在头顶上工作。我发现您将 CDI 和 Spring 混合在一起只是令人惊讶和有趣,而 Spring 旨在作为 CDI/EJB 的竞争对手/替代品。

于 2013-02-21T18:37:44.957 回答