无法将值添加到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());
}
}
谢谢,解决了。我将会更多地研究阵列。 – prabello 2014-09-25 16:55:04
海事组织这是一个更好的做法和习惯,使用@ PostConstruct方法来初始化东西。构造函数可能在这里工作,但最终会失败 – 2014-09-25 17:04:06
@ JaqenH'ghar像一个公共无效的初始化()惠特#PostConstruct并添加所有的内容即时通讯让构造函数? – prabello 2014-09-25 17:11:08