我正在尝试从数据库中检索一组值并将其分配给selectItem(Primefaces UI组件)。但它没有分配,而是显示nullPointerException。
我的第一页中有两个视图页面,我只是有一个命令按钮进入一个从DB中检索一些数据的函数,然后我将这些值分配给另一个视图页面中的selectITem(下拉)。
我的第一个视图页面是
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head></h:head>
<h:body>
<h:form>
<p:panel header="autocomplete">
<h:panelGrid columns="2">
<p:commandButton value="Submit" action="#{receiveclass.retrieve}" ajax="false"> </p:commandButton>
</h:panelGrid>
</p:panel>
</h:form>
</h:body>
</html>
动作的java代码是..
public String retrieve(){
FacesContext context = FacesContext.getCurrentInstance();
loginBean loginBean = (loginBean) context.getApplication().evaluateExpressionGet(context, "#{loginBean}", loginBean.class);
List<loginBean> retList=loginDao.retrieval();
loginBean.setRetList(retList);
return "success";
}
}
在上面的代码中,从数据库中检索后,该值被正确设置为retList, Db部分用loginDao编写。
loginBean只是我的下一个视图页面的托管bean,我有selectItem标签,我使用从DB检索到的列表调用该selectItem的setter。
bean部分是..
List<loginBean> retList;
public List<loginBean> getRetList() {
return retList;
}
public void setRetList(List<loginBean> retList) {
this.retList = retList;
在我的下一个视图页面中,我已将selectItems的值指定为
<h:outputText value="Current City"></h:outputText>
<p:selectOneMenu style="width:150px" id="currentCity" value="#{loginBean.currentCity}" required="true" immediate="true" requiredMessage="Select your city" label="Country">
<f:selectItem value="#{loginBean.retList}"></f:selectItem>
</p:selectOneMenu>
执行后我的控制台说......
SEVERE: Error Rendering View[/login.xhtml]
java.lang.NullPointerException
at org.apache.myfaces.shared_impl.renderkit.html.HtmlResponseWriterImpl.write(HtmlResponseWriterImpl.java:867)
at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeSelectItems(SelectOneMenuRenderer.java:282)
at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeInput(SelectOneMenuRenderer.java:96)
at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeMarkup(SelectOneMenuRenderer.java:75)
at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeEnd(SelectOneMenuRenderer.java:53)
我尝试了几种方法,但没有改进。
答案 0 :(得分:1)
有两个问题。
首先,<f:selectItem>
表示单个选择项,但您通过它传递了整个List
个项目。您应该使用<f:selectItems>
代替。
<f:selectItems value="#{loginBean.retList}" />
其次,PrimeFaces有一个错误,它希望在项目值旁边显式指定选择项目标签。因此,您应指定itemValue
和itemLabel
:
<f:selectItems value="#{loginBean.retList}" var="item" itemValue="#{item}" itemLabel="#{item}" />
答案 1 :(得分:0)
有多个基本问题。