Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF转换器给出空指针异常_Jsf_Javabeans_Converter - Fatal编程技术网

JSF转换器给出空指针异常

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

我已经阅读了所有与我的问题有关的帖子,但我找不到解决办法。我已将转换器创建到我的国家/地区实体,但当我提交表单时,转换器会抛出ConverterException:

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)