[Resolvido]Dica/Tutorial: Fazer um array no managed bean para pegar dados do banco

Olá pessoal,

Estou fazendo uma aplicação e queria fazer um array no meu ManagedBean para ele pegar os dados de uma tabela do banco de dados e me retornar. Eu fiz um array mas ele pegava os dados do Enum, e agora estou tentando ir para o banco de dados e estou com dificuldades.

Alguém ai tem alguma dica ou algum lugar que explica como fazer este array ?

Procurei na net aqui para ver se alguém tinha problema parecido com o meu, achei vários, mas nenhum resolvido.

Grato

Acredito q no seu caso seria melhor utilizar uma classe como ArrayList, já q vc vai precisar de um array dinâmico, se precisar de mais detalhes em como fazer posta a parte do seu código q vc está com dúvidas p/ poder te ajudar melhor.

Como assim, explica melhor, explica oq vc ja fez…

Eu imagino que vc quer popular um ArrayList, a partir de dados do banco…
Pra isso vc tem que fazer um select (hql, jpq, criteria) e jogar o result dele pro seu List
Detalhes: mas isso não é na camada de UI, e sim mais abaixo (repository)

você ta usando o que Hibernate ou JDBC normal ?

Desculpem não ser tão claro para vocês.

Sim, quero popular um ArrayList a partir do banco de dados.

A parte que eu fiz com Enum funcionou 100% :slight_smile:

Mas a parte popular ele com o banco não deu, não estou conseguindo criar o array.

ImovelBean(Este está funcionando 100 %):

...//codigo acima
	public List<SelectItem> getTiposImovel(){
		List<SelectItem> resultado = new ArrayList<SelectItem>();
		for(EnumTipoImovel tipo : EnumTipoImovel.values()){
			resultado.add(new SelectItem(tipo, tipo.toString()));
		}
		return resultado;
	}
//codigo abaixo

Estou com duvidas aqui. Não consigo fazer o meu for para poder a aplicação fazer o loop

ResidencialBean:


...//Codigo acima
	public List<SelectItem> getNomeResidencial(){
		List<SelectItem> resultado = new ArrayList<SelectItem>();
		for(Residencial nome : Residencial.values() ){
			resultado.add(new SelectItem(nome, nome.toString()));
		}
		return resultado;
	}
..//codigo abaixo

Lembrando que o meu for acima está retornando erro: The method values() is undefined for the type Residencial.
Eu tentei colocar com iterator, mas também dá erro.
:confused:

O erro ocorre pq não existe o método “values()” dentro da classe “Residencial”. Como vc está efetuando a consulta no banco? E como está a classe Residencial?

O que eu estava com erro consegui resolver, agora tenho um outro problema.

O meu ResidencialBean ficou assim:

public List<SelectItem> getNomeResidencial() throws SiteException { List<SelectItem> resultado = new ArrayList<SelectItem>(); for(Residencial nome : residencialDao.listNomeResidencial() ){ resultado.add(new SelectItem(nome, nome.toString())); } return resultado; }


Meu novo problema:

Quando eu altero o meu for que citei acima para apenas listResidencial, aparece em forma de código na web, pelo o que percebi é porque ele me retorna um int em forma de string. Agora quando está como eu postei acima o meu selectOneMenu não entra neste método.

Meu selectOneMenu:

<h:panelGroup id="residencialForm"> <p:selectOneMenu itemValue="#{residencialBean.residencial.nome}"> <f:selectItem itemLabel="Selecione" /> <f:selectItems itemValue="#{residencialBean.nomeResidencial }" /> </p:selectOneMenu>

Bom, se eu colocar o meu f:selectItems desta maneira:

Ele faz TUDO, retorna tudo certinho, mas a página apenas me mostra este erro:

[code]exception

javax.servlet.ServletException: java.lang.String cannot be cast to modelo.Residencial
javax.faces.webapp.FacesServlet.service(FacesServlet.java:347)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
root cause

java.lang.ClassCastException: java.lang.String cannot be cast to modelo.Residencial
controle.ResidencialBean.getNomeResidencial(ResidencialBean.java:50)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:173)
com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:200)
org.apache.el.parser.AstValue.getValue(AstValue.java:169)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:106)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
javax.faces.component.UISelectItems.getValue(UISelectItems.java:125)
org.primefaces.renderkit.InputRenderer.getSelectItems(InputRenderer.java:53)
org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeMarkup(SelectOneMenuRenderer.java:71)
org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeEnd(SelectOneMenuRenderer.java:65)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:879)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:308)
com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:101)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:300)
com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:181)
com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:125)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:300)
com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:181)
com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:125)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:59)
org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:47)
org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:202)
org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:119)
org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:56)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:879)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1655)
javax.faces.render.Renderer.encodeChildren(Renderer.java:164)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1648)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1651)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1651)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:389)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:127)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:117)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:335)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)[/code]

A minha linha 50 do ResidencialBean é exatamente o for do meu código postado no começo desta mensagem.

Agora se eu colocar o meu f:selectItems desta maneira:

Ele nem acessa o método. (Coloquei para “debugar” apenas este método e nem parou nele).

Para resolver eu coloquei o meu resultado para pegar o nome ao invés de transformar em String.

public List<SelectItem> getNomeResidencial() throws SiteException { List<SelectItem> resultado = new ArrayList<SelectItem>(); for(Residencial nome : residencialDao.listNomeResidencial() ){ resultado.add(new SelectItem(nome, nome.getNome())); // Aqui estava nome.toString() } return resultado; }

e o meu selectOneMenu deixei o atributo como value ao invés de itemValue:

<p:selectOneMenu itemValue="#{residencialBean.residencial.nome}"> <f:selectItem itemLabel="Selecione" /> <f:selectItems value="#{residencialBean.nomeResidencial }" /> </p:selectOneMenu>

Obrigado pela atenção de todos.
Abraços :slight_smile: