Criaçao de forms

Tenho um problema na criaçao de um form, estou fazendo o processo dinamicamente, onde pego os campos (codigo, descricao, endereco…) da tabela, e cria os campos de tela…mas nao estou conseguindo criar um grupo de objetos.
Estou usando Eclipse Helios, JSF 2.0 com TomCat 7, para desenvolver uma tela web.

package Teste;

import java.sql.SQLException;
import java.util.ArrayList;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlInputText;
import javax.faces.component.html.HtmlPanelGroup;

import Base.CxCadLinha;
import Fontes.CadLinha;

@ManagedBean
@SessionScoped
public class Novo {
	private HtmlPanelGroup Grupo;
	
	private HtmlPanelGroup CriaCampos() throws SQLException {
		CxCadLinha cxLinha = new CxCadLinha();
		ArrayList<CadLinha> listaLinha = null;
		try {
			listaLinha = cxLinha.ListarLinhas("leite_linhas");
		} catch (Exception e) {
			e.printStackTrace();
		}
		HtmlInputText texto = new HtmlInputText();
		for (int i = 0; i < listaLinha.size() && i < 8; i++) {
			texto.setValue(listaLinha.get(i).getDescricao());
			System.out.println(texto.getValue());
			try{
				Grupo.getChildren().add(i,texto);
			}catch (Exception e){
				System.out.println("erro ao criar o grupo. " + e);
			}
		}
		return Grupo;
		
	}
	
	public HtmlPanelGroup getGrupo() {
		return Grupo;
	}
	public void setGrupo(HtmlPanelGroup grupo) {
		Grupo = grupo;
	}
	
	public static void main(String[] args) throws SQLException {
		// TODO Auto-generated method stub
		Novo inicia = new Novo();
		inicia.CriaCampos();
	}

Nesse codigo eu alimento em uma outra classe os campos da tabela, no caso fiz uma funçao que passo como parametro a tabela e me retorna os campos dela

listaLinha = cxLinha.ListarLinhas("leite_linhas");

e estou criando um grupo que vai ser o retorno desse metodo, que é um HtmlPanelGroup, porém a hora que eu vou dar um add ele nao funciona

Grupo.getChildren().add(i,texto);

e passo no meu xhtml assim

<h:panelGroup beding="#{teste.novo.criaCampos}"/>

Se alguém souber onde estou errando, ou alguma forma de resolver isso, pois nao consigo adicionar os campos no meu Grupo e criar a tela
Grato

Fala cara.

Tenta colocar o id e tb é “binding” com “i” e não “beding”…

Talvez seja só isso.

Um abs

Rodrigo

Entao cara, ate troquei na esperança que fosse isso, mas nao é…

ele simplesmente nao gera codigo algum, vem a pagina embranco
executa tudo certo nas classes, mas na tela nao vem nada…

eu nao sei se eu estou usando o correto para adicionar os campos, um: HtmlPanelGroup.

talvez tenha outro componente, mas nao sei qual seria, estou tentando fazer o meu primeiro exemplo, entao nao tenho mto conhecimento sobre.

abraço!

Esse é o erro que acontece quando eu executo:

javax.servlet.ServletException: /Teste.xhtml @13,52 binding="#{teste.novo.criaCampos}": Target Unreachable, identifier ‘teste’ resolved to null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)

mas parece estar tudo funcionando nas classes, teria ideia o pq disso?

abraço

Um chute…

Experimenta colocar o código do bean em um try/catch e tirar aquele throws sqlexception.

Talvez seja isso, pois não tem como o componente tratar a exception.

Ahh, e a sua referencia pro binding é o Grupo, o criaCampo vc deve usar em uma action de um botão e não aí.

Se isso não funcionar, minha técnica é criar os componentes um a um até achar.

Amanhã vou fazer um código desse pra testar
Abs

Entao cara, olha so, vo te manda passo a passo pra ve se fica mais facil de tu conseguir me ajudar.

tenho 3 pacotes: Base, Fontes e Teste

Primeiro começa com a minha conexao com a base:

package Base;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Conexao {
	private String driver = "org.postgresql.Driver";
	private String user = "postgres";
	private String pwd = "teste55";
	private String url = "jdbc:postgresql://192.168.50.30:5432/leite";

	Connection con = null;

	public Connection Conecta() throws SQLException {
		try {
			Class.forName(driver);
			con = DriverManager.getConnection(url, user, pwd);
		} catch (ClassNotFoundException e) {
			System.out.println("Erro ao conectar " + e);
		} catch (SQLException e) {
			System.out.println("Erro ao conectar " + e);
		}
		System.out.println("conectou");
		return con;
	}

	public ResultSet Consulta(String sql) throws SQLException {
		try {
			Conecta();
			ResultSet resultado;
			Statement stmt = con.createStatement(); // Obrigatório para inclusão
													// e consulta
			resultado = stmt.executeQuery(sql);// efetiva a consulta no BD
			return resultado;
		} catch (SQLException ex) {
			System.out.println("Falha ao pesquisar registro.\n" + ex);
		}
		return null;
	}

}

Depois vem a criaçao dos campos da minha tabela em especifico que eu to trabalhando como teste

package Fontes;

public class CadLinha {
	private Integer codigo;
	private String descricao;

	public Integer getCodigo() {
		return codigo;
	}

	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
}

ai depois fiz uma funçao que me lista todos os campos da tabela, somente os campos:

package Base;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

import Fontes.CadLinha;

public class CxCadLinha {
	public ArrayList<CadLinha> ListarLinhas(String tabela) throws SQLException {
		Conexao con = new Conexao();
		String sql = "select field from info_tabela('" + tabela + "')";
		System.out.println(sql);
		ResultSet rsCampos = con.Consulta(sql);
		ArrayList<CadLinha> listaLinha = new ArrayList<CadLinha>();
		try {
			while (rsCampos.next()) {
				CadLinha menu = new CadLinha();
				//menu.setCodigo(rsCampos.getInt("codigo"));
				menu.setDescricao(rsCampos.getString("field"));
				listaLinha.add(menu);
			}
		} catch (SQLException ex) {
			Logger.getLogger(CadLinha.class.getName()).log(Level.SEVERE,
					null, ex);
		}
		return listaLinha;
		
	}
}

e por ultimo ai eu faço minha classe pra monta os campos, que vai invoca a classe que faz a funçao de pegar somente os campos da tabela, no caso a classe listada acima:

package Teste;

import java.util.ArrayList;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlInputText;
import javax.faces.component.html.HtmlPanelGroup;

import Base.CxCadLinha;
import Fontes.CadLinha;

@ManagedBean
@SessionScoped
public class Novo {
	private HtmlPanelGroup grupo;
	private HtmlInputText texto;
	private CxCadLinha cxLinha;

	@SuppressWarnings("unused")
	private HtmlPanelGroup CriaCampos() {
		cxLinha = new CxCadLinha();
		ArrayList<CadLinha> listaLinha = null;
		try {
			listaLinha = cxLinha.ListarLinhas("leite_linhas");
		} catch (Exception e) {
			e.printStackTrace();
		}
		texto = new HtmlInputText();
		grupo = new HtmlPanelGroup();
		for (int i = 0; i < listaLinha.size() && i < 8; i++) {
			texto.setValue(listaLinha.get(i).getDescricao());
			System.out.println(texto.getValue());
			try {
				grupo.getChildren().add(texto);
			} catch (Exception e) {
				System.out.println("erro ao criar o grupo. " + e);
			}
		}
		return grupo;
	}
}

onde aqui eu passo atraves do meu ListarLinhas que é a minha funçao que tras somente os campos da tabela

eu faço passo a passo e nao entra no catch na hora de adicionar no meu grupo, porem na hora que eu faço a chamada do meu xhtml
que chamo assim?

<h:commandButton value="teste" action="#{novo.criaCampos}"/>

e acontece esse erro:

javax.servlet.ServletException: Property ‘criaCampos’ not found on type Teste.Novo
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)

que nao está achando a funçao criaCampos

se eu passar assim:

<h:panelGroup binding="#{novo.criaCampos}"/>

ele me dah praticamente o mesmo erro:

javax.servlet.ServletException: /Teste.xhtml @17,46 binding="#{novo.criaCampos}": Property ‘criaCampos’ not found on type Teste.Novo
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)

ai se eu passar usando o pacote antes do nome da classe:

<h:panelGroup binding="#{teste.novo.criaCampos}"/>

acontece esse erro:

javax.servlet.ServletException: /Teste.xhtml @17,52 binding="#{teste.novo.criaCampos}": Target Unreachable, identifier ‘teste’ resolved to null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)

Apesar do texto que acabei de digitar ai…ahaha…espero que fique mais claro e se possivel puder me dar um help.

Abraço!

É, tentei aqui mas tive o mesmo erro.

abs

Pois é, tens alguma sugetao? algo que eu possa fazer?

tentei trocar e fazer a mesma coisa com o netbeans, e tomcat 6, o mesmo erro…

Se souberes de alguma dica!

Abraço!