Classe no arquivo JSP (não retorna os dados)

4 respostas
emso.exe

Estou iniciando em JSP e não estou conseguindo exibir e validar os dados de um formulário... pesquisei na internet e parece que o mais comum é importar as classes java no arquivo JSP, mas neste problema eu tenho que obrigatoriamento declarar as classes (Pessoa e PessoaBLL) na página JSP... Postei a classe Pessoa() que não estou conseguindo fazer exibir os dados enviados. Não postei a classe PessoaBLL por que quero ver se somente resolvendo este problema de exibição eu consiga também validar os dados. Valew!

PessoaIHM.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>::::: pessoaIHM.html :::::</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
      <form method="post" action="gravaPessoa.jsp">
          <h2>pessoaIHM</h2>
          <p>Código: &lt;input name="codigo" type="text" maxlength="5" size="6"&gt;</p>
          <p>Nome: &lt;input name="nome" type="text" maxlength="40" size="45"&gt;</p>
          <p>Sexo: &lt;input name="sexo" type="text" maxlength="10" size="11"&gt;</p>
          <p>Idade: &lt;input name="idade" type="text" maxlength="3" size="4"&gt;</p>
          &lt;input type="submit" name="enviar" value="Enviar"&gt;
          &lt;input type="reset" name="limpar" value="Limpar"&gt;
      &lt;/form&gt;
  &lt;/body&gt;
&lt;/html&gt;
gravaPessoa.jsp
&lt;%@page contentType="text/html" pageEncoding="UTF-8"%&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
        &lt;title&gt;::::: gravaPessoa.jsp :::::&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h2&gt;gravaPessoa&lt;/h2&gt;

&lt;%
class Pessoa {
    String codigo;
    String nome;
    String sexo;
    String idade;

    public Pessoa() {}

    public void setCodigo(String _codigo) { codigo = _codigo; }
    public void setNome(String _nome) { nome = _nome; }
    public void setSexo(String _sexo) { sexo = _sexo; }
    public void setIdade(String _idade) { idade = _idade; }

    public String getCodigo() { return codigo; }
    public String getNome() { return nome; }
    public String getSexo() { return sexo; }
    public String getIdade() { return idade; }

    public Pessoa novaPessoa = new Pessoa();

    if (PessoaBLL.getErro())
         PessoaBll.getMens();
    else { 
        novaPessoa.setCodigo(getCodigo());
        novaPessoa.setNome(getCodigo());
        novaPessoa.setSexo(getCodigo());
        novaPessoa.setIdade(getCodigo());
        }
}
%&gt;

    &lt;/body&gt;
&lt;/html&gt;

4 Respostas

MABS

Olá, emso.exe!

Você esta querendo enviar os dados de um formulário a um objeto Java, usando o JSP. Caso eu esteja errado ignore o exemplo que vou te passar!
Nunca fiz o processo da forma que você colocou acima com um arquivo HTML chamando um segundo arquivo, sendo um JSP.
Eu faço normalmente da seguinte forma:

Dentro do próprio JSP já crio um formulário e defino qual método Java deverá ser chamado usando TAGLIB.
No exemplo que vou mostrar abaixo estou fazendo um cadastro de produto e estou usando um framework MVC (VRaptor 3).

Arquivo JSP:
<form id="produtosForm" action="<c:url value="/produtos" />" method="post"">
	<fieldset>
		<legend>Adiciona Produto</legend>
		
		<label for="nome">Nome:</label>
		<input id="nome" class="required" minlength="3" type="text" name="produto.nome" value="${produto.nome}" />
		
		<label for="descricao">Descrição:</label>
		<textarea cols="28" rows="6" id="descricao" class="required" maxlength="40" name="produto.descricao">${produto.descricao}</textarea>
		
		<label for="preco">Preço:</label>
		<input id="preco" min="0" name="produto.preco" value="${produto.preco}" />
		
		<button type="submit">Enviar</button>
	</fieldset>
</form>
Método chamado pelo JSP (O método esta dentro de uma classe Controller):
@Post
	@Path("/produtos")
	@Restrito
	public void adiciona(Produto produto) {
		if (produto.getNome() == null || produto.getNome().length() < 3) {
			this.validator.add(new ValidationMessage("Nome é obrigatório e precisa ter mais de 3 letra", "produto.nome")); 
		}
		
		if (produto.getDescricao() == null || produto.getDescricao().length() > 40) {
			this.validator.add(new ValidationMessage("Descição é obrigatória não pode ter mais que 40 letras", "produto.descricao"));
		}
		
		if (produto.getPreco() == null) {
			this.validator.add(new ValidationMessage("Preço precisa ser positivo", "produto.preco"));
		}
		this.validator.onErrorUsePageOf(ProdutosController.class).formulario();
		
		this.dao.salva(produto);
		this.result.redirectTo(this).lista();
	}
Método "salva" que esta dentro de uma Classe DAO (Estou usando o hibernate como framework de persistência):
public void salva(Produto produto) {
		Transaction tx = this.session.beginTransaction();
		this.session.save(produto);
		tx.commit();
	}
Espero que tenha ajudado!

Se estiver começando em Java e quiser qualquer referência em Apostila ou Livros só avisar que eu te passo.

Abraço.

drsmachado

Camarada, você construiu a classe dentro do jsp? Onde viu isto? Quem te ensinou essa barbárie?
Mesmo trabalhando com scriptlets, as classes são colocadas fora da jsp (no diretório src, de preferência, dentro de algum package).
Aí, na jsp, basta colocar a taglib <%@import="pacote.NomeDaClasse" %>
E referenciar a classe com a chamada ao seu construtor

<%
 NomeDaClasse ndc = new NomeDaClasse();
%>

E, pegar os atributos pelo getParameter

ndc.setNomeDoAtributo((CastParaTipoDoAtributo) request.getParameter("nomeDadoNoElementoQueFoiPassadoComoParametro"); %>

Após aprender isto, por favor, pesquise sobre jstl, EL e algum framework como Struts 2 ou Vraptor…

emso.exe

Resolvi desta forma abaixo... mas vou tentar fazer como citado acima. Valew pela ajuda!

&lt;%@page contentType="text/html" pageEncoding="UTF-8"%&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
        &lt;title&gt;::::: gravaPessoa.jsp :::::&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h2&gt;gravaPessoa&lt;/h2&gt;

&lt;%
    String codigo = request.getParameter("codigo");
    String nome = request.getParameter("nome");
    String sexo = request.getParameter("sexo");
    String idade = request.getParameter("idade");

    if (codigo.equals(""))
        out.println("&lt;br /&gt; O campo CÓDIGO é de preenchimento obrigatório!");
    else try { Integer.parseInt(codigo);
              out.println("&lt;br /&gt; CÓDIGO: " + codigo); }
        catch (Exception e) { out.println("O campo CÓDIGO deve ser numérico!"); }

    if (nome.equals(""))
        out.println("&lt;br /&gt; O campo NOME é de preenchimento obrigatório!");
    else
        out.println("&lt;br /&gt; NOME: " + nome);

    if (sexo.equals(""))
        out.println("&lt;br /&gt; O campo NOME é de preenchimento obrigatório!");
    else
        out.println("&lt;br /&gt; SEXO: " + sexo);

    if (idade.equals(""))
        out.println("&lt;br /&gt; O campo IDADE é de preenchimento obrigatório!");
    else try { Integer.parseInt(codigo);
              out.println("&lt;br /&gt; IDADE: " + idade); }
        catch (Exception e) { out.println("&lt;br /&gt; O campo IDADE deve ser numérico!"); }
%&gt;

    &lt;/body&gt;
&lt;/html&gt;
wilsontads

Dá uma estudada sobre request.getParameter("") , request.getParameterValues("") e request.getParameterNames("").
Se for desenvolver em JSP, vc vai precisar muito desses 3 camaradinhas…

Criado 30 de maio de 2011
Ultima resposta 30 de mai. de 2011
Respostas 4
Participantes 4