JSF FacesConverter ELResolver.getValue返回null
我正在尝试使用一个输入表单的转换器,其中我使用了一些“selectOneMenu”组件 当我尝试在转换器的“getAsObject”方法中获取控制器对象时,请使用:JSF FacesConverter ELResolver.getValue返回null,jsf,nullpointerexception,converter,Jsf,Nullpointerexception,Converter,我正在尝试使用一个输入表单的转换器,其中我使用了一些“selectOneMenu”组件 当我尝试在转换器的“getAsObject”方法中获取控制器对象时,请使用: facesContext.getApplication().getELResolver(). getValue(facesContext.getELContext(), null, "usersController"); 我总是空的。 这是我的转换器类,它嵌套在UserController类中 @F
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为控制器生成的代码。我会尽力弄明白有什么不同。不客气。问题是,它只返回现有实例,如果它还不存在,则不为您预创建。