无法将值添加到Bean构造函数上的数组

问题描述:

我试图将值添加到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) 

您必须在最初的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