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

7 respostas
S

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

7 Respostas

fabiocortolan

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.

igor_ks

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)

V

você ta usando o que Hibernate ou JDBC normal ?

S

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:

fabiocortolan

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?

S

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:
<f:selectItems value="#{residencialBean.nomeResidencial }" />
Ele faz TUDO, retorna tudo certinho, mas a página apenas me mostra este erro:
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)

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:
<f:selectItems itemValue="#{residencialBean.nomeResidencial }" />

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

S

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:

Criado 19 de abril de 2013
Ultima resposta 22 de abr. de 2013
Respostas 7
Participantes 4