JSF转换器给出空指针异常
我已经阅读了所有与我的问题有关的帖子,但我找不到解决办法。我已将转换器创建到我的国家/地区实体,但当我提交表单时,转换器会抛出ConverterException:JSF转换器给出空指针异常,jsf,javabeans,converter,Jsf,Javabeans,Converter,我已经阅读了所有与我的问题有关的帖子,但我找不到解决办法。我已将转换器创建到我的国家/地区实体,但当我提交表单时,转换器会抛出ConverterException: Cannot convert 105 to Country java.lang.NullPointerException 105 其中105是我在表格中选择的国家实体的ID <h:outputText value="Country (*): " /> <h:selectOneMenu id="country" v
Cannot convert 105 to Country java.lang.NullPointerException 105
其中105是我在表格中选择的国家实体的ID
<h:outputText value="Country (*): " />
<h:selectOneMenu id="country" value="#{createUser.user.country}" required="true" requiredMessage="Please select a country." converter="#{countryConverter}" >
<f:selectItem itemValue="#{null}" itemLabel="-- select one --" />
<f:selectItems value="#{createUser.countries}" var="country" itemValue="#{country}" itemLabel="#{country.country}" />
</h:selectOneMenu>
CreateDao源代码:
@Stateless
@LocalBean
public class CountryDAO {
public CountryDAO() {
}
@PersistenceContext
private EntityManager em;
@Resource
SessionContext context;
public List<Country> getAllCountries() {
TypedQuery<Country> query = em.createNamedQuery(Country.FIND_ALL, Country.class);
return query.getResultList();
}
public Country find(Long id) {
return em.find(Country.class, id);
}
public Country getById(long id) {
TypedQuery<Country> query = em.createNamedQuery(Country.FIND_BY_ID, Country.class).setParameter("id", id);
return query.getSingleResult();
}
}
并修改DAO以打印与国家实体相关的内容:
public Country find(Long id) {
Country c = em.find(Country.class, id);
System.out.println(c.getCountry());
return c;
}
我在控制台中看到:
FINE: SELECT ID, COUNTRY FROM COUNTRY WHERE (ID = ?) bind => [1 parameter bound]
FINEST: Connection released to connection pool [read].
INFO: Italy
在浏览器中:
java.lang.NullPointerException
at Converters.CountryConverter.getAsObject(CountryConverter.java:46)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:171)
at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(MenuRenderer.java:202)
at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:319)
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
at javax.faces.component.UIInput.validate(UIInput.java:960)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
at javax.faces.component.UIInput.processValidators(UIInput.java:698)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIForm.processValidators(UIForm.java:253)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
createDao.find(Long.valueOf(105))
无法编译,您需要一个String
@AlexandreLavoie 105当前正在作为String
到达(请参见value
的类型)。@XtremeBiker我的意思是您可能正在使用createDao.find(Long.valueOf(“105”)
而不是createDao.find(Long.valueOf(105))
是的,明白了,我刚看到问题的最后一行;-)@Omar,@FacesConverter
不需要,只要转换器一直是@ManagedBean
。如果不是,它可以被称为converter=“countryConverter”
,如果它是@facescoverter
。无论如何,@Enrico对于NullPointerException
您必须调试转换器,但是它似乎没有机会抛出一个空指针,是吗?
FINE: SELECT ID, COUNTRY FROM COUNTRY WHERE (ID = ?) bind => [1 parameter bound]
FINEST: Connection released to connection pool [read].
INFO: Italy
java.lang.NullPointerException
at Converters.CountryConverter.getAsObject(CountryConverter.java:46)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:171)
at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(MenuRenderer.java:202)
at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:319)
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
at javax.faces.component.UIInput.validate(UIInput.java:960)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
at javax.faces.component.UIInput.processValidators(UIInput.java:698)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIForm.processValidators(UIForm.java:253)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)