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>
<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 />
<%
String nome = request.getParameter("nome");
String idade = request.getParameter("idade");
String cidade = request.getParameter("cidade");
%>
<!--Declaracao das variaveis udsando JSTL-->
<!--A tag "c:set var="variavel" value="valorVar" " declara uma variavel...-->
<!--...onde "var" e o nome da variavel e "value" e o valor dessa variavel-->
<c:set var="nome" scope="session" value="${nome}" />
<c:set var="idade" scope="session" value="${idade}" />
<c:set var="cidade" scope="session" value="${cidade}" />
<h3> Seu nome é: <c:out value="${nome}" /></h3>
<br />
<hr />
<br />
<h3>Sua idade é: <c:out value="${idade}" /></h3>
<br />
<hr />
<br />
<h3>Sua cidade é: <c:out value="${cidade}" /></h3>
<br />
<hr />
<br />
<c:if test="${idade == 20}" >
<h2 class="verdade">Idade igual a 20 anos</h2>
</c:if>
<c:if test="${idade != 20}">
<h2 class="mentira">Não é 20 não</h2>
</c:if>
</body>
</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>
<style type="text/css">
h2.verdade
{
color: green;
}
h2.mentira
{
color: red;
}
</style>
</head>
<body>
<form name="meuForm" action="pagina01.jsp" method="GET">
<table>
<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>
</table>
</form>
<br />
<br />
<c:if test="${not empty requestScope.nome}">
<h3> Seu nome é: <c:out value="${requestScope.nome}" /></h3>
<br />
<hr />
<br />
</c:if>
<c:if test="${not empty requestScope.idade}">
<h3>Sua idade é: <c:out value="${requestScope.idade}" /></h3>
<br />
<hr />
<br />
</c:if>
<c:if test="${not empty requestScope.cidade}">
<h3>Sua cidade é: <c:out value="${requestScope.cidade}" /></h3>
<br />
<hr />
<br />
</c:if>
<c:if test="${not empty requestScope.idade}">
<c:choose>
<c:when test="${requestScope.idade == 20}" >
<h2 class="verdade">Idade igual a 20 anos</h2>
</c:when>
<c:otherwise>
<h2 class="mentira">Não é 20 não</h2>
</c:otherwise>
</c:choose>
</c:if>
</body>
</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.