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

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:

[code]<%–
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>

    &lt;style type="text/css"&gt;
        h2.verdade
        {
            color: green;
        }
        
        h2.mentira
        {
            color: red;
        }

    &lt;/style&gt;
    
&lt;/head&gt;
&lt;body&gt;
    &lt;table&gt;
    &lt;form name="meuForm" action="pagina01.jsp" method="get"&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;/form&gt; 
    &lt;/table&gt;
    <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;

</html>[/code]

Quando clico no botão “ENVIAR”, nada acontece.

O que pode ser?

Grato pela atenção.

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.

[code]<%–
Document : pagina01
Created on : 01/07/2008, 21:08:44
Author : Fabricio
–%>

<%@page contentType=“text/html” pageEncoding=“UTF-8”%>
<%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
http://www.w3.org/TR/html4/loose.dtd”>

<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”>
<title>Teste JSTL</title>

    &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;

</html>[/code]
Fiz de cabeça(não tenho como testar no momento), então veja se funciona.

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.

Opa… funcionou.

Agora sim está tudo OK… por enquanto.

Muito obrigado aos colegas.