[RESOLVIDO]Erro usando o selectManyCheckbox

2 respostas
kmunga

Bom, basicamente esta pagina deveria carregar de um banco de dados uma lista de filmes do genero drama e exibilas como opções do selectManyCheckbox, mas esta dando erro:

o erro
java.lang.IllegalArgumentException
	at com.sun.faces.renderkit.SelectItemsIterator.initializeItems(Unknown Source)
	at com.sun.faces.renderkit.SelectItemsIterator.hasNext(Unknown Source)
	at com.sun.faces.renderkit.html_basic.SelectManyCheckboxListRenderer.encodeEnd(Unknown Source)
	at javax.faces.component.UIComponentBase.encodeEnd(Unknown Source)
	at javax.faces.component.UIComponent.encodeAll(Unknown Source)
	at javax.faces.component.UIComponent.encodeAll(Unknown Source)
	at javax.faces.component.UIComponent.encodeAll(Unknown Source)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(Unknown Source)
	at com.sun.faces.application.view.MultiViewHandler.renderView(Unknown Source)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(Unknown Source)
	at com.sun.faces.lifecycle.Phase.doPhase(Unknown Source)
	at com.sun.faces.lifecycle.LifecycleImpl.render(Unknown Source)
	at javax.faces.webapp.FacesServlet.service(Unknown Source)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:636)
a pagina drama.xhtml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html" 
      xmlns:p="http://primefaces.org/ui" 
      xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Locadora do Zamba</title>
</h:head>
<h:body>

  <p:breadCrumb>
    <p:menuitem value="categories" url="principal2.xhtml" />
    <p:menuitem value="Drama" url="drama.xhtml" />
    <p:menuitem value="Romance" url="romance.xhtml"/>
    <p:menuitem value="Ficção" url="ficcao.xhtml" />
    <p:menuitem value="Terror" url="terror.xhtml" />
    <p:menuitem value="Suspense" url="suspense.xhtml" />
  </p:breadCrumb>
  <h:outputText value="Usuario:" />
  <h:outputText value="#{usuarioManagedBean.usuario.login}" />
  <h:outputText value=" esta conectado." />
  <h:form>
    <h:commandLink value="Deslogar" action="#{usuarioManagedBean.deslogar}" />
  </h:form>
  <h:outputText value="Filmes genero Drama"/>
  <h:selectManyCheckbox value="#{usuarioManagedBean.filmeSelecionados}">
    <f:selectItems value="usuarioManagedBean.listaFilmes"/>
  </h:selectManyCheckbox>
  <h:commandButton value="submit" action="#{usuarioManagedBean.gravar}"/>
</h:body>
</html>
e finalmente o usuarioManagedBean
package pojo;

import java.util.List;
import java.util.ArrayList;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import pojo.Usuario;
import javax.faces.application.FacesMessage;
import java.sql.*;

@ManagedBean
@SessionScoped

public class UsuarioManagedBean {

	private List<String> listaFilmes;
	private List<String> filmeSelecionados=new ArrayList<String>();
	private Usuario usuario;
	private Validador validador;

	public UsuarioManagedBean(){
		usuario=new Usuario();
		listaFilmes=new ArrayList<String>();
	}
	public List<String> getFilmeSelecionados(){
		return filmeSelecionados;
	}
	public void setFilmeSelecionados(List<String> filmeSelecionados){
		this.filmeSelecionados=filmeSelecionados;
	}
	public List<String> getListaFilmes(){
		return listaFilmes;
	}
	
	public void setListaFilmes(List<String> listaFilmes){
		BD bd=new BD();
		if(bd.getConnection()){
			try{
				String sql="select nome from filmes where genero='drama'";
				PreparedStatement statement=bd.connection.prepareStatement(sql);
				ResultSet resultSet=statement.executeQuery();
				while(resultSet.next()){
					listaFilmes.add(resultSet.getString("nome"));
				}
				bd.close();
				
			}
			catch(SQLException erro){
			  System.out.println("Erro encontrado:" + erro);	
			}
		}
		this.listaFilmes=listaFilmes;
	}
	public Usuario getUsuario(){
		return usuario;
	}
	

	public void setUsuario(Usuario usuario){
		this.usuario=usuario;
	}

	public String logar(){
		validador=new Validador();
		if(validador.validar(usuario.getLogin(),usuario.getSenha())){
			System.out.println("Encontrou o usuario");
			return "OK";
		}
		FacesMessage msg=new FacesMessage("Usuario/senha invalidos");
		FacesContext.getCurrentInstance().addMessage("form", msg);
		return "";
	}
	public String deslogar(){
		usuario=new Usuario();
		return "LOGOUT";
	}
	
	public void gravar(List<String> filmes){
		
	}
}

Obrigado

2 Respostas

aprendizweb

E ai Blz!!!

Considero que deve ser seu [b]<f:selectItems value="usuarioManagedBean.listaFilmes"/>[/b]  vc esqueceu de coloca-lo no padrão pois deve constar #{}

<f:selectItems value="#{usuarioManagedBean.listaFilmes}"/>.

kmunga

Valeu, era só esse problema mesmo, a gente que tá começando acaba ficando tão preso ao codigo java que se esquece do JSF.

Outra correção necessaria foi de mudar o codigo que carrega os dados do banco de dados do setListaFilmes para o get.

Criado 10 de setembro de 2012
Ultima resposta 10 de set. de 2012
Respostas 2
Participantes 2