2014-09-25 65 views
-1

我試圖將值添加到ManagedBean的構造函數上的數組,但我是gettint錯誤。無法將值添加到Bean構造函數上的數組

什麼我嘗試是

@ManagedBean 
@ViewScoped 
public class EquipamentoBean { 

    private List<Equipamento> equipamentos; 

    private List<Equipamento> equipamentosFiltrados; 

    private List<EquipamentoTipo> tipos; 

    public EquipamentoBean(){ 
     this.equipamentos = new EquipamentoDao().listaEquipamentos(); 
     for (Equipamento equipamento : equipamentos) { 
      this.tipos.add(equipamento.getEquipamentoTipoId()); 
     } 
//  this.tipos = new EquipamentoTipoDao().listaTipos(); WORKS, BUT NEEDS ANOTHER MYSQL CONNECTION 
    } 

裏面我班Equipamento我有一個EquipamentoTipo,所以每個Equipamento關聯到一個EquipamentoTipo 1-N的關係。 我需要使用EquipamentoTipo作爲顯示數據表的過濾器,所以不是再次連接到數據庫並檢索所有我剛剛決定的EquipamentoTipo,而是創建一個EquipamentoTipo列表並使用我已有的equipamentos列表填充它。

我不明白爲什麼我可以填寫我的列表白衣從另一個類的方法,但不能填補白衣另一個列表。

我XHTML

<p:column filterBy="#{equipamento.equipamentoTipoId}" 
      sortBy="#{equipamento.equipamentoTipoId}" 
      headerText="Tipo"> 
      <f:facet name="filter"> 
       <p:selectOneMenu onchange="PF('equipamentoTable').filter()"> 
        <f:selectItem itemLabel="Selecione" 
            itemValue="#{null}" 
            noSelectionOption="true"> 
        </f:selectItem> 
        <f:selectItems value="#{equipamentoBean.tipos}"> 
        </f:selectItems> 
       </p:selectOneMenu> 
      </f:facet> 
      <h:outputText value="#{equipamento.equipamentoTipoId}"> 
      </h:outputText> 
     </p:column> 

錯誤

exception 

javax.servlet.ServletException: Cant instantiate class: br.com.timbrasil.network.bean.EquipamentoBean. 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:659) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

root cause 

com.sun.faces.mgbean.ManagedBeanCreationException: Cant instantiate class: br.com.timbrasil.network.bean.EquipamentoBean. 
    com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:191) 
    com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:100) 
    com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409) 
    com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269) 
    com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:257) 
    com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:117) 
    com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
    com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
    org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:80) 
    org.apache.el.parser.AstValue.getValue(AstValue.java:135) 
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187) 
    com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) 
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) 
    javax.faces.component.UIData.getValue(UIData.java:732) 
    org.primefaces.component.datatable.DataTable.getValue(DataTable.java:1002) 
    org.primefaces.component.api.UIData.getDataModel(UIData.java:629) 
    javax.faces.component.UIData.getRowCount(UIData.java:356) 
    org.primefaces.component.api.UIData.calculateFirst(UIData.java:175) 
    org.primefaces.component.datatable.DataTableRenderer.preRender(DataTableRenderer.java:110) 
    org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:82) 
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) 
    javax.faces.render.Renderer.encodeChildren(Renderer.java:176) 
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) 
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456) 
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133) 
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) 
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:647) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

root cause 

java.lang.NullPointerException 
    br.com.timbrasil.network.bean.EquipamentoBean.<init>(EquipamentoBean.java:26) 
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    java.lang.reflect.Constructor.newInstance(Constructor.java:408) 
    java.lang.Class.newInstance(Class.java:433) 
    com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:186) 
    com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:100) 
    com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409) 
    com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269) 
    com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:257) 
    com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:117) 
    com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
    com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
    org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:80) 
    org.apache.el.parser.AstValue.getValue(AstValue.java:135) 
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187) 
    com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) 
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) 
    javax.faces.component.UIData.getValue(UIData.java:732) 
    org.primefaces.component.datatable.DataTable.getValue(DataTable.java:1002) 
    org.primefaces.component.api.UIData.getDataModel(UIData.java:629) 
    javax.faces.component.UIData.getRowCount(UIData.java:356) 
    org.primefaces.component.api.UIData.calculateFirst(UIData.java:175) 
    org.primefaces.component.datatable.DataTableRenderer.preRender(DataTableRenderer.java:110) 
    org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:82) 
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) 
    javax.faces.render.Renderer.encodeChildren(Renderer.java:176) 
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) 
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456) 
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133) 
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) 
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:647) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

回答

0

您必須在最初的ArrayList前添加的對象;

public EquipamentoBean(){ 
    this.equipamentos = new EquipamentoDao().listaEquipamentos(); 
    this.tipos = new ArrayList<EquipamentoTipo>(); 
    for (Equipamento equipamento : equipamentos) { 
     this.tipos.add(equipamento.getEquipamentoTipoId()); 
    } 
} 
+0

謝謝,解決了。我將會更多地研究陣列。 – prabello 2014-09-25 16:55:04

+1

海事組織這是一個更好的做法和習慣,使用@ PostConstruct方法來初始化東西。構造函數可能在這裏工作,但最終會失敗 – 2014-09-25 17:04:06

+0

@ JaqenH'ghar像一個公共無效的初始化()惠特#PostConstruct並添加所有的內容即時通訊讓構造函數? – prabello 2014-09-25 17:11:08