Não consigo pegar dados de um form para exibi-los usando JSTL

4 respostas
FabricioPJ

Olá a todos. O meu problema, creio eu, é bem simples. Estou fazendo uns testes com JSTL, então cirei essa simples página que deveria pegar nome, idade e cidade de um usuário e exibir esses dados mais abaixo. Só que isso não está ocorrendo. Segue abaixo meu código:

<%-- 
    Document   : pagina01
    Created on : 01/07/2008, 21:08:44
    Author     : Fabricio
--%>

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

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>


<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Teste JSTL</title>
        
        <style type="text/css">
            h2.verdade
            {
                color: green;
            }
            
            h2.mentira
            {
                color: red;
            }
  
        </style>
        
    </head>
    <body>
        <table>
        <form name="meuForm" action="pagina01.jsp" method="get">
            <tr><td>NOME: <input type="text" name="nome" value="" /></td></tr>
            <tr><td>IDADE: <input type="text" name="idade" value="" /></td></tr>
            <tr><td>CIDADE DE NASCIMENTO: <input type="text" name="cidade" value=""></td></tr>
            <tr><td>       <input type="submit" value="ENVIAR" /></td></tr>
        </form> 
        </table>
        <br /><br />
        &lt;%
          String nome = request.getParameter("nome");
          String idade = request.getParameter("idade");
          String cidade = request.getParameter("cidade");
        %&gt;

       &lt;!--Declaracao das variaveis udsando JSTL--&gt;
       &lt;!--A tag "c:set var="variavel" value="valorVar" " declara uma variavel...--&gt;
       &lt;!--...onde "var" e o nome da variavel e "value" e o valor dessa variavel--&gt;
       &lt;c:set var="nome" scope="session" value="${nome}" /&gt;
       &lt;c:set var="idade" scope="session" value="${idade}" /&gt;
       &lt;c:set var="cidade" scope="session" value="${cidade}" /&gt;
       &lt;h3&gt; Seu nome é: &lt;c:out value="${nome}" /&gt;&lt;/h3&gt;
       <br />
       &lt;hr /&gt;
       <br />
       &lt;h3&gt;Sua idade é: &lt;c:out value="${idade}" /&gt;&lt;/h3&gt;
       <br />
       &lt;hr /&gt;
       <br />
       &lt;h3&gt;Sua cidade é: &lt;c:out value="${cidade}" /&gt;&lt;/h3&gt;
       <br />
       &lt;hr /&gt;
       <br />
       
       &lt;c:if test="${idade == 20}" &gt;
           &lt;h2 class="verdade"&gt;Idade igual a 20 anos&lt;/h2&gt;
       &lt;/c:if&gt;
       &lt;c:if test="${idade != 20}"&gt;
           &lt;h2 class="mentira"&gt;Não é 20 não&lt;/h2&gt;
       &lt;/c:if&gt;     
    &lt;/body&gt;
&lt;/html&gt;

Quando clico no botão "ENVIAR", nada acontece.

O que pode ser?

Grato pela atenção.

4 Respostas

victorwss

Isso nunca vai funcionar. Esse é o código da página do formulário, de onde você quer ler os dados. Os scriptlets que processam esses dados são executados na geração do formulário, e não processados na resposta!

Enfim, você tem que separar a página que contém o formulário da página que contém a resposta.

B
&lt;%-- 
    Document   : pagina01
    Created on : 01/07/2008, 21:08:44
    Author     : Fabricio
--%&gt;

&lt;%@page contentType="text/html" pageEncoding="UTF-8"%&gt;
&lt;%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%&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;Teste JSTL&lt;/title&gt;
        
        &lt;style type="text/css"&gt;
            h2.verdade
            {
                color: green;
            }
            
            h2.mentira
            {
                color: red;
            }
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;form name="meuForm" action="pagina01.jsp" method="GET"&gt;
        &lt;table&gt;
            &lt;tr&gt;&lt;td&gt;NOME: &lt;input type="text" name="nome" value="" /&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;IDADE: &lt;input type="text" name="idade" value="" /&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;CIDADE DE NASCIMENTO: &lt;input type="text" name="cidade" value=""&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;&lt;input type="submit" value="ENVIAR" /&gt;&lt;/td&gt;&lt;/tr&gt;
        &lt;/table&gt;
        &lt;/form&gt; 
        <br />
        <br />

        &lt;c:if test="${not empty requestScope.nome}"&gt;
            &lt;h3&gt; Seu nome é: &lt;c:out value="${requestScope.nome}" /&gt;&lt;/h3&gt;
            <br />
            &lt;hr /&gt;
            <br />
        &lt;/c:if&gt;
        &lt;c:if test="${not empty requestScope.idade}"&gt;
            &lt;h3&gt;Sua idade é: &lt;c:out value="${requestScope.idade}" /&gt;&lt;/h3&gt;
            <br />
            &lt;hr /&gt;
            <br />
        &lt;/c:if&gt;
        &lt;c:if test="${not empty requestScope.cidade}"&gt;
            &lt;h3&gt;Sua cidade é: &lt;c:out value="${requestScope.cidade}" /&gt;&lt;/h3&gt;
            <br />
            &lt;hr /&gt;
            <br />
        &lt;/c:if&gt;
       
        &lt;c:if test="${not empty requestScope.idade}"&gt;
            &lt;c:choose&gt;
                &lt;c:when test="${requestScope.idade == 20}" &gt;
                    &lt;h2 class="verdade"&gt;Idade igual a 20 anos&lt;/h2&gt;
                &lt;/c:when&gt;
                &lt;c:otherwise&gt;
                    &lt;h2 class="mentira"&gt;Não é 20 não&lt;/h2&gt;
                &lt;/c:otherwise&gt;     
            &lt;/c:choose&gt;
        &lt;/c:if&gt;
    &lt;/body&gt;
&lt;/html&gt;
Fiz de cabeça(não tenho como testar no momento), então veja se funciona.
MauNunes

E ai FabricioPJ, tudo bem ?
Olha dando uma olhada no seu código notei um pequeno erro.
quando você recupera os parâmetros conforme abaixo, você simplesmente recupera eles e atribui eles na variavel. Não está atribuindo ele em nenhum lugar para depois a sua jstl recuperar.

String nome = request.getParameter("nome"); String idade = request.getParameter("idade"); String cidade = request.getParameter("cidade");

No códogi abaixo você diz para ele recuperar o valor da sessão, atraves do atributo scope=“session”, ou seja ele somente ira buscar o valor na sessão. porem se você não especificar o atributo scope ele ira procurar em 4 lugares na seguinte ordem: no scopo de pagina, no scopo de requisição no caso request, no scopo da sessao, que é o que você colocou, ou no scopo de aplicação (application).

<c:set var="nome" scope="session" value="${nome}" />

Para resolver isso faça o seguinte substitua o código:

String nome = request.getParameter("nome"); String idade = request.getParameter("idade"); String cidade = request.getParameter("cidade");

por

request.setAtributte("nome",request.getParameter("nome"));   
request.setAtributte("idade",request.getParameter("idade"));  
request.setAtributte("cidade",request.getParameter("cidade"));

No código abaixo,tire o atributo scope.

<c:set var="nome" scope="session" value="${nome}" />  
<c:set var="idade" scope="session" value="${idade}" />  
<c:set var="cidade" scope="session" value="${cidade}" />

VE se resolve, abraços.

FabricioPJ

Opa… funcionou.

Agora sim está tudo OK… por enquanto.

Muito obrigado aos colegas.

Criado 1 de julho de 2008
Ultima resposta 2 de jul. de 2008
Respostas 4
Participantes 4