значение для selectItems в JSF не присваивается из базы данных - PullRequest
0 голосов
/ 03 ноября 2011

Я пытаюсь получить набор значений из базы данных и назначил его selectItem (компонент пользовательского интерфейса Primefaces).Но он не назначен, а показывает nullPointerException.

У меня есть две страницы просмотра на моей первой странице, просто у меня есть кнопка команды для входа в функцию для извлечения некоторых данных из БД, затем я назначил эти значения 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> 

. Ява-код для действия: ..

         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, я вызвал установщик этого selectItem с полученным списком изDB.

часть компонента: ..

       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)

Я пробовал несколько способов, но без улучшения.

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Есть 2 проблемы.

Во-первых, <f:selectItem> представляет один выбранный элемент, но все же вы пропускаете через него целые List элементов.Вместо этого вы должны использовать <f:selectItems>.

<f:selectItems value="#{loginBean.retList}" />

Во-вторых, в PrimeFaces есть ошибка, которая предполагает, что метка выбранного элемента будет явно указана рядом со значением элемента.Таким образом, вы должны указать itemValue и itemLabel:

<f:selectItems value="#{loginBean.retList}" var="item" itemValue="#{item}" itemLabel="#{item}" />

См. Также:

0 голосов
/ 03 ноября 2011

Есть несколько основных проблем.

  1. на стороне jsf вам нужно f: selectItems (множественное число) вместо f: selectItem (единственное)
  2. Имена классов должны начинаться с прописной буквы
  3. логин расширяет элемент выбора jsf?я не уверен.
  4. bean-компоненты должны ссылаться на себя, используя конфигурацию face-context.xml, а не elcontext.
...