JSF FacesConverter ELResolver.getValue返回null

JSF FacesConverter ELResolver.getValue返回null,jsf,nullpointerexception,converter,Jsf,Nullpointerexception,Converter,我正在尝试使用一个输入表单的转换器,其中我使用了一些“selectOneMenu”组件 当我尝试在转换器的“getAsObject”方法中获取控制器对象时,请使用: facesContext.getApplication().getELResolver(). getValue(facesContext.getELContext(), null, "usersController"); 我总是空的。 这是我的转换器类,它嵌套在UserController类中 @F

我正在尝试使用一个输入表单的转换器,其中我使用了一些“selectOneMenu”组件

当我尝试在转换器的“getAsObject”方法中获取控制器对象时,请使用:

facesContext.getApplication().getELResolver().
                getValue(facesContext.getELContext(), null, "usersController");
我总是空的。 这是我的转换器类,它嵌套在UserController类中

@FacesConverter(forClass = User.class, value="userConverter")
public static class UsersControllerConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
        if (value == null || value.length() == 0) {
            return null;
        }
        UserController controller = (UserController) facesContext.getApplication().getELResolver().
                getValue(facesContext.getELContext(), null, "usersController");
        System.out.println(value);
        System.out.println(getKey(value));
        System.out.println(controller);
        return controller.getUsers(getKey(value));
    }

    java.lang.String getKey(String value) {
        java.lang.String key;
        key = value;
        return key;
    }

    String getStringKey(java.lang.String value) {
        StringBuilder sb = new StringBuilder();
        sb.append(value);
        return sb.toString();
    }

    @Override
    public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
        if (object == null) {
            return null;
        }
        if (object instanceof User) {
            User o = (User) object;
            return getStringKey(o.getUsername());
        } else {
            throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + User.class.getName());
        }
    }

}
UserController类声明:

@Named("userController")
@ManagedBean
@SessionScoped
public class UserController implements Serializable{
PS:我是一个新手,我刚开始学习JavaEE/Faces。

这个

UserController controller = (UserController) facesContext.getApplication().getELResolver().
    getValue(facesContext.getELContext(), null, "usersController");
这确实不是正确的方法。以下是正确的方法:

UserController controller = facesContext.getApplication().evaluateExpressionGet(
    facesContext, "#{usersController}", UsersController.class);

谢谢,成功了。我查看了“Application”类,现在看到了这个方法文档。该代码是NetBeans为控制器生成的代码。我会尽力弄明白有什么不同。不客气。问题是,它只返回现有实例,如果它还不存在,则不为您预创建。