Session.setAttribute

28 respostas
A

Boa noite
Agora minha dúvida é no session
como eu faço pra zerar o valer de variaveis de sessão??
uma vez setado ovalor de uma variável de sessão, eu não consigo alterar seu valor :frowning:
Grato
Guilherme

28 Respostas

raguiar

Nao sei se entendi direito, mas…

Cria uma variavel na sessao com conteudo “Ricardo”:

session.setAttribute("nome","Ricardo");

Altera o conteudo da variavel anterior para vazio:

session.setAttribute("nome","");

Exclui a variavel da sessao:

session.removeAttribute("nome");
A

era isso mesmo que eu queria fazer, mas infelizmente com o session.setAttribute eu não consigo passar um valor novo pra variável, que em questão é uma String
:frowning:

A

Bom, vou tentar ajudar na solução
eu consigo setar novos valores para as variáveis de sessão, desde que eu feche meu navegador e abra um novo. Sem fazer isso, as variáveis de sessão ficam inalteradas. Eu coloco setAttribute em todas as páginas do meu site, mas as variáveis ficam com o valor da primeira página que tentou setar os valores
Grato
Guilherme

_fs

Bem, realmente não sei se é possível alterar, mas … por que não simplesmente remove e depois coloca de novo, com o valor atualizado?

danieldestro

“Aerolito”:
Bom, vou tentar ajudar na solução
eu consigo setar novos valores para as variáveis de sessão, desde que eu feche meu navegador e abra um novo. Sem fazer isso, as variáveis de sessão ficam inalteradas. Eu coloco setAttribute em todas as páginas do meu site, mas as variáveis ficam com o valor da primeira página que tentou setar os valores
Grato
Guilherme

Vc tá fazendo algo de errado, pq é possível sim mudar o valor de um atributo na sessão.

E vc está mexendo na session em todas as suas páginas? Arrgh!!! Vai te dar um trabalhão isso…

A

Não é possível
o site que estou fazendo é de busca de automóveis, mas quando voce faz a primeira busca, ele seta valores para as variáveis de sessão. Na segunda busca, ele não atribui novos valores para as mesmas. Eu não consigo entender o por quê ? :frowning:
se alguém quiser dar uma olhada no site para ver se pode me dar uma ajuda, eu agradeceria muito. O site ainda está em construção, então tem várias coisas estranhas…e outra coisa… não sou profissional, estou fazendo isso para a faculdade :slight_smile:
http://numsabedexa.no-ip.com:8080/site_IA/index.html

A

Bom, acho melhor dizer mais um detalhe…
na página de confirmção, eu estou pegando os dados dos input e setando eles como variáveis de sessão. Aí na página que eu redireciono com a confirmação , eu recupero essas variáveis. Como podem ver, na primeira busca funciona, mas na segunda não, os valores se mantêm os mesmos da primeira busca, a não ser que voce abra outro navegador.
Grato
Guilherme

danieldestro

Posta o código pra gente ver!

A

Aqui vai o código da página de busca:
<%@ page contentType=“text/html; charset=iso-8859-1” language=“java” errorPage="" session=“true” %>

<html>
<head>
<title>Busca</title>
<meta http-equiv=“Content-Type” content=“text/html; charset=iso-8859-1”>
</head>

<center>


<strong><font size="+7" face=“Copperplate Gothic Bold”>Área

de busca de automóveis</font></font></strong></center>

<div align=“justify”><font size="+2">

<font face=“Tw Cen MT Condensed”>Nessa área você deve selecionar as opções de

busca. Caso não selecione nenhuma das opções, serão listados todos os carros,

como na opção “Listar Carros” do menu principal. Você não precisa selecionar

valores em todas as opções de busca, apenas nas que forem de seu interesse.</font></font>

</div>

<form action=“confirma.jsp” method=“get”>

<table width=“75%” border=“0”>

<tr>

<td><font face=“Comic Sans MS”>Marca:</font>


<select name=“marca” >

<option>null</option>

<option>Audi</option>

<option>BMW</option>

<option>Fiat</option>

<option>Ford</option>

<option>General Motors</option>

<option>Peogeot</option>

<option>Reanult</option>

<option>Volkswagen</option></select>

</td>

<td><font face=“Comic Sans MS”>Cor:</font>




</td>

</tr>

<tr>

<td><font face=“Comic Sans MS”>Número de portas:</font>


<select name=“portas” >

<option>null</option>

<option>duas</option>

<option>quatro</option>

</select>

</td>

<td><font face=“Comic Sans MS”>Ano:</font>




</td>

</tr>

<tr>

<td><font face=“Comic Sans MS”>Tipo:</font>


<select name=“tipo” >

<option>null</option>

<option>Hatch</option>

<option>Perua</option>

<option>Pick up</option>

<option>Sedan</option>

</select>

</td>

<td><font face=“Comic Sans MS”>Modelo:</font>




</td>

</tr>

</table>

</form>

</html>
A
aqui é a página de confirmação:

<%@ page contentType=text/html; charset=iso-8859-1 language=java import=java.sql.* errorPage=""  session=true %>

<%! String portas, cor, marca, modelo, ano, tipo; %>

<% session.setAttribute(portas, request.getParameter(portas)); %>

<% session.setAttribute(cor, request.getParameter(cor)); %>

<% session.setAttribute(marca, request.getParameter(marca)); %>

<% session.setAttribute(modelo, request.getParameter(modelo)); %>

<% session.setAttribute(ano, request.getParameter(ano)); %>

<% session.setAttribute(tipo, request.getParameter(tipo)); %>

<html>
<head>
<title>valores</title>
<meta http-equiv=“Content-Type” content=“text/html; charset=iso-8859-1”>
</head>

<div align="justify">

<font face=“Tw Cen MT Condensed”>Agora você deve confirmar suas opções. Caso tenha
errado em alguma das informações, clique em voltar. Caso contrário, clique em prosseguir.</font> </div>
hum

</html>
A

aqui é o arquivo xml de dados referentes aos carros :
<%@ page contentType=“text/xml; charset=iso-8859-1” language=“java” session=“true” %>

<?xml version=“1.0” encoding=“iso-8859-1”?>
<?xml-stylesheet href=“genxslt2.jsp” type=“text/xsl”?>
<!DOCTYPE automoveis SYSTEM “automoveis2.dtd”>

<carro > <marca>BMW</marca> <tipo>Sedan</tipo> <cor>preto</cor> 1998 <portas>quatro</portas> <modelo foto="carros/328i.jpg">328i</modelo> 86500 Todas revisões feitas na concessionária, inclusive a de 80000 km </carro> <carro> <marca>Volkswagen</marca> <tipo>Pick up</tipo> <cor>prata</cor> 2000 <portas>duas</portas> <modelo foto="carros/saveiro.jpg">Saveiro</modelo> 27500 Modelo 2000 Turbo intercooler. Insulfilm G5. CD mp3 Kenwood </carro> <carro> <marca>Volkswagen</marca> <tipo>Hatch</tipo> <cor>prata</cor> 1995 <portas>duas</portas> <modelo foto="carros/gol.jpg">Gol</modelo> 10700 Modelo CLi 1.6 bola. Acompanha alarme e trava elétrica </carro> <carro> <marca>Renault</marca> <tipo>Perua</tipo> <cor>azul</cor> 1999 <portas>quatro</portas> <modelo foto="carros/scenic.jpg">Scenic</modelo> 23000 Modelo RT 16V. Motor 1.6. Trio elétrico. Ar condicionado </carro> <carro> <marca>Fiat</marca> <tipo>Perua</tipo> <cor>azul</cor> 1998 <portas>duas</portas> <modelo foto="carros/marea.jpg">Marea</modelo> 22800 Modelo Marea Weekend HLX 2.0 20V. Airbag motorista </carro>
A
e aqui é o .xslt que faz a filtragem do xml:

<%@ page contentType=text/html; charset=iso-8859-1 language=java session=true %>

<%! String expr, marca, tipo, cor, ano, portas, modelo; %>

<%! boolean primeiro ; %>

<% primeiro = true; %>

<% expr = null; %>

<% marca = (String) session.getAttribute(marca); %>

<% tipo = (String) session.getAttribute(tipo); %>

<% cor = (String) session.getAttribute(cor); %>

<% ano = (String) session.getAttribute(ano); %>

<% portas = (String) session.getAttribute(portas); %>

<% modelo = (String) session.getAttribute(modelo); %>
<%  if (!marca.equals( null ))

{

if (primeiro)

{

expr = marca[.=’” + marca +"’ ] “;

primeiro = false;

}

else

expr += and marca[.=’” + marca +”’ ] ";

}
if (!tipo.equals( "null" ))
{
	if (primeiro)
		{
		expr = "tipo[.='" + tipo +"' ] ";
		primeiro = false;
		}
	else
		expr += "and tipo[.='" + tipo +"' ] ";
}

if (!cor.equals( "null" ))
{
	if (primeiro)
		{
		expr = "cor[.='" + cor +"' ] ";
		primeiro = false;
		}
	else
		expr += "and cor[.='" + cor +"' ] ";
}

if (!ano.equals( "null" ))
{
	if (primeiro)
		{
		expr = "ano[.='" + ano +"' ] ";
		primeiro = false;
		}
	else
		expr += "and ano[.='" + ano +"' ] ";
}

if (!portas.equals( "null" ))
{
	if (primeiro)
		{
		expr = "portas[.='" + portas +"' ] ";
		primeiro = false;
		}
	else
		expr += "and portas[.='" + portas +"' ] ";
}

if (!modelo.equals( "null" ))
{
	if (primeiro)
		{
		expr = "portas[.='" + modelo +"' ] ";
		primeiro = false;
		}
	else
		expr += "and modelo[.='" + modelo +"' ] ";
}

%>

<?xml version=“1.0” encoding=“iso-8859-1”?>
<xsl:stylesheet xmlns:xsl=“http://www.w3.org/1999/XSL/Transform” version=“1.0”>
<xsl:template match="/">
<HTML>

<CENTER>
<H1><font face=“Copperplate Gothic Bold”>Catálogo
de carros</font></H1>
<TABLE border=“2” bgcolor="#E6E6E6">

&lt;xsl:for-each select="automoveis/carro"&gt; 
&lt;xsl:if test="&lt;%= expr %&gt;"&gt;
&lt;TR&gt; 
  &lt;TH&gt;&lt;font face="Comic Sans MS"&gt;MARCA&lt;/font&gt;&lt;/TH&gt;
  &lt;TH&gt;&lt;font face="Comic Sans MS"&gt;MODELO&lt;/font&gt;&lt;/TH&gt;
  &lt;TH&gt;&lt;font face="Comic Sans MS"&gt;TIPO&lt;/font&gt;&lt;/TH&gt;
  &lt;TH&gt;&lt;font face="Comic Sans MS"&gt;COR&lt;/font&gt;&lt;/TH&gt;
  &lt;TH&gt;&lt;font face="Comic Sans MS"&gt;PORTAS&lt;/font&gt;&lt;/TH&gt;
  &lt;TH&gt;&lt;font face="Comic Sans MS"&gt;ANO&lt;/font&gt;&lt;/TH&gt;
  &lt;TH&gt;&lt;font face="Comic Sans MS"&gt;ADICIONAIS&lt;/font&gt;&lt;/TH&gt;
&lt;/TR&gt;
	&lt;TR FONTCOLOR="#000000"&gt; 
  	&lt;TD &gt;&lt;font face="Tw Cen MT Condensed" size="+1"&gt;&lt;xsl:value-of select="marca"/&gt;&lt;/font&gt;&lt;/TD&gt;
	&lt;TD&gt;&lt;font face="Tw Cen MT Condensed" size="+1"&gt;&lt;xsl:value-of select="modelo"/&gt;&lt;/font&gt;&lt;/TD&gt;
  	&lt;TD&gt;&lt;font face="Tw Cen MT Condensed" size="+1"&gt;&lt;xsl:value-of select="tipo"/&gt;&lt;/font&gt;&lt;/TD&gt;
  	&lt;TD&gt;&lt;font face="Tw Cen MT Condensed" size="+1"&gt;&lt;xsl:value-of select="cor"/&gt;&lt;/font&gt;&lt;/TD&gt;
   	&lt;TD&gt;&lt;font face="Tw Cen MT Condensed" size="+1"&gt;&lt;xsl:value-of select="portas"/&gt;&lt;/font&gt;&lt;/TD&gt;
	&lt;TD&gt;&lt;font face="Tw Cen MT Condensed" size="+1"&gt;&lt;xsl:value-of select="ano"/&gt;&lt;/font&gt;&lt;/TD&gt;
	&lt;TD&gt;&lt;font face="Tw Cen MT Condensed" size="+1"&gt;&lt;xsl:value-of select="adicionais"/&gt;&lt;/font&gt;&lt;/TD&gt;
	&lt;/TR&gt;
	&lt;TR&gt;&lt;TD colspan="7"&gt;&lt;center&gt;&lt;xsl:element name="IMG"&gt;
						&lt;xsl:attribute name="SRC"&gt;
							&lt;xsl:value-of select="modelo/@foto"/&gt;
						&lt;/xsl:attribute&gt;
						&lt;/xsl:element&gt;&lt;/center&gt;&lt;/TD&gt;&lt;/TR&gt;
	&lt;/xsl:if&gt; &lt;/xsl:for-each&gt;

</TABLE>
</CENTER>

</HTML>
</xsl:template>
</xsl:stylesheet>

A

Desculpe ter lotado tanto o forum, mas é que eu realmente não estou entendendo o por quê do erro :frowning:
e outra coisa… o link do site ainda não funciona…devo estar com algum problema no servidor :frowning:
Abraços
Guilherme

danieldestro

Seu programa deve estar mto louco. Aqui isso funcionou:

&lt;%@ page contentType=&quot;text/html; charset=iso-8859-1&quot; language=&quot;java&quot; errorPage=&quot;&quot; session=&quot;true&quot; %&gt; 
&lt;html&gt;
&lt;head&gt; 
 &lt;title&gt;Busca&lt;/title&gt; 
&lt;/head&gt;
&lt;body&gt;
&lt;center&gt;
&lt;strong&gt;&lt;font size=&quot;+7&quot; face=&quot;Copperplate Gothic Bold&quot;&gt;Área 
de busca de automóveis&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/center&gt; 
&lt;div align=&quot;justify&quot;&gt;&lt;font size=&quot;+2&quot;&gt; 
&lt;font face=&quot;Tw Cen MT Condensed&quot;&gt;Nessa área você deve selecionar as opções de 
busca. Caso não selecione nenhuma das opções, serão listados todos os carros, 
como na opção &quot;Listar Carros&quot; do menu principal. Você não precisa selecionar 
valores em todas as opções de busca, apenas nas que forem de seu interesse.&lt;/font&gt;&lt;/font&gt; 
&lt;/div&gt; 
&lt;form action=&quot;confirma.jsp&quot; method=&quot;post&quot;&gt; 
&lt;table width=&quot;75%&quot; border=&quot;0&quot;&gt; 
&lt;tr&gt; 
&lt;td&gt;&lt;font face=&quot;Comic Sans MS&quot;&gt;Marca&#58;&lt;/font&gt;
&lt;select name=&quot;marca&quot; &gt; 
 &lt;option&gt;&lt;/option&gt; 
 &lt;option&gt;Audi&lt;/option&gt; 
 &lt;option&gt;BMW&lt;/option&gt; 
 &lt;option&gt;Fiat&lt;/option&gt; 
 &lt;option&gt;Ford&lt;/option&gt; 
 &lt;option&gt;General Motors&lt;/option&gt; 
 &lt;option&gt;Peogeot&lt;/option&gt; 
 &lt;option&gt;Reanult&lt;/option&gt; 
 &lt;option&gt;Volkswagen&lt;/option&gt;&lt;/select&gt; 
&lt;/td&gt; 
&lt;td&gt;&lt;font face=&quot;Comic Sans MS&quot;&gt;Cor&#58;&lt;/font&gt;
&lt;/td&gt; 
&lt;/tr&gt; 
&lt;tr&gt; 
&lt;td&gt;&lt;font face=&quot;Comic Sans MS&quot;&gt;Número de portas&#58;&lt;/font&gt;
&lt;select name=&quot;portas&quot; &gt; 
 &lt;option&gt;&lt;/option&gt; 
 &lt;option&gt;duas&lt;/option&gt; 
 &lt;option&gt;quatro&lt;/option&gt; 
&lt;/select&gt; 
&lt;/td&gt; 
&lt;td&gt;&lt;font face=&quot;Comic Sans MS&quot;&gt;Ano&#58;&lt;/font&gt;
&lt;/td&gt; 
&lt;/tr&gt; 
&lt;tr&gt; 
&lt;td&gt;&lt;font face=&quot;Comic Sans MS&quot;&gt;Tipo&#58;&lt;/font&gt;
&lt;select name=&quot;tipo&quot; &gt; 
 &lt;option&gt;&lt;/option&gt; 
 &lt;option&gt;Hatch&lt;/option&gt; 
 &lt;option&gt;Perua&lt;/option&gt; 
 &lt;option&gt;Pick up&lt;/option&gt; 
 &lt;option&gt;Sedan&lt;/option&gt; 
&lt;/select&gt; 
&lt;/td&gt; 
&lt;td&gt;&lt;font face=&quot;Comic Sans MS&quot;&gt;Modelo&#58;&lt;/font&gt;
&lt;/td&gt; 
&lt;/tr&gt; 
&lt;/table&gt;
&lt;input type=&quot;submit&quot; name=&quot;ok&quot; value=&quot;ok&quot;&gt;
&lt;/form&gt;
&lt;br&gt;&lt;Br&gt;&lt;br&gt;
&lt;%= session.getAttribute&#40;&quot;portas&quot;&#41; %&gt; 
&lt;%= session.getAttribute&#40;&quot;cor&quot;&#41; %&gt; 
&lt;%= session.getAttribute&#40;&quot;marca&quot;&#41; %&gt; 
&lt;%= session.getAttribute&#40;&quot;modelo&quot;&#41; %&gt; 
&lt;%= session.getAttribute&#40;&quot;ano&quot;&#41; %&gt; 
&lt;%= session.getAttribute&#40;&quot;tipo&quot;&#41; %&gt; 
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;%@ page contentType=&quot;text/html; charset=iso-8859-1&quot; language=&quot;java&quot; import=&quot;java.sql.*&quot; errorPage=&quot;&quot; session=&quot;true&quot; %&gt; 
&lt;%! String portas, cor, marca, modelo, ano, tipo; %&gt; 
&lt;% session.setAttribute&#40;&quot;portas&quot;, request.getParameter&#40;&quot;portas&quot;&#41;&#41;; %&gt; 
&lt;% session.setAttribute&#40;&quot;cor&quot;, request.getParameter&#40;&quot;cor&quot;&#41;&#41;; %&gt; 
&lt;% session.setAttribute&#40;&quot;marca&quot;, request.getParameter&#40;&quot;marca&quot;&#41;&#41;; %&gt; 
&lt;% session.setAttribute&#40;&quot;modelo&quot;, request.getParameter&#40;&quot;modelo&quot;&#41;&#41;; %&gt; 
&lt;% session.setAttribute&#40;&quot;ano&quot;, request.getParameter&#40;&quot;ano&quot;&#41;&#41;; %&gt; 
&lt;% session.setAttribute&#40;&quot;tipo&quot;, request.getParameter&#40;&quot;tipo&quot;&#41;&#41;; %&gt; 


&lt;html&gt; 
&lt;head&gt; 
&lt;title&gt;valores&lt;/title&gt; 
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot;&gt; 
&lt;/head&gt;
&lt;body&gt;
&lt;%= session.getAttribute&#40;&quot;portas&quot;&#41; %&gt; 
&lt;%= session.getAttribute&#40;&quot;cor&quot;&#41; %&gt; 
&lt;%= session.getAttribute&#40;&quot;marca&quot;&#41; %&gt; 
&lt;%= session.getAttribute&#40;&quot;modelo&quot;&#41; %&gt; 
&lt;%= session.getAttribute&#40;&quot;ano&quot;&#41; %&gt; 
&lt;%= session.getAttribute&#40;&quot;tipo&quot;&#41; %&gt; 
&lt;/body&gt;
&lt;/html&gt;
A

Eu fiz as alterações que você pediu e realmente, ele imprime na tela os novos valores da busca, quando eu faço a segunda busca…
O problema é que quando o .xlst vai fazer a filtragem para jogar na tela os resultados, ele utiliza as variáveis de sessão antigas :frowning:

danieldestro

CUIDADOOO…

vc está fazendo algo que pode ser totalmente errado:

marca.equals( “null” )

Não é assim q vc testa se um objeto (ou String) é null.

o certo é:

if( marca == null ) {}

Testa isso abaixo:

String marca = null; if&#40; marca == null &#41; &#41; &#123; System.out.println&#40;&quot; marca = null&quot;&#41;; &#125; else if&#40; marca.equals&#40; &quot;null&quot; &#41; &#41; &#123; System.out.println&#40;&quot; marca equals 'null'&quot;&#41;; &#125;

A

Se eu faço essas alterações no if, ele entra em todos eles e monta uma expressão com todos os valores que eu não escolhi iguais a “null”
quando na verdade ele deveria ignorar as variáveis com valor “null”

:frowning:

danieldestro

Então quer dizer que vc programou errado.
Dá uma reorganizada nisso ai. Quem sabe vc não corrige o primeiro problema, que pode ser efeito colateral deste aí.

A

eu acabei de fazer testes com as variáveis e, se eu faço comparação com == dá errado, tem q ser com .equals mesmo :frowning:

danieldestro

Geralmente, com dados vindos via FORM, a gente faz assim:

String nome = request.getParameter&#40;&quot;nome&quot;&#41;; if&#40; nome != null && nome.trim&#40;&#41;.length&#40;&#41; &gt; 0 &#41; &#123; // veio algum dado não vazio &#125;

E tem que ver que é totalmente inadequado você enviar a String “null” para indicar que nenhum dado foi informado. Seria muito melhor enviar um vazio ("").

A

Nossa…eu to ficando louco…
Agora eu fiz isso,., passei Strings vazias nos input e mudei o if para a forma com que você pediu…
aih ele não entra em nenhuma das opções do if e o pior de tudo…
eu to imprimindo as variáveis de sessão na tela que seria para imprimir a lista de carros, e ela não se altera depois da primeira busca :frowning:

A

Bom, eu corrigi um erro meu, pra variar um pouco…hehe
e agora ele faz as buscas com o if da forma que voce pediu, mas as variáveis de sessão continuam sem ser atualizadas a partir da segunda busca :frowning:

danieldestro

Zipa os fontes, ou melhor, manda o WAR pra mim.

A

Desculpa minha ignorância , mas o que é WAR???
outra coisa…descobri que se eu apertar o “refresh” no navegador, ele atualiza os valores das variáveis de sessão, e aí ele faz a nova busca.
Agora preciso saber como fazer para não precisar atualizar o navegador para fazer novas buscas

danieldestro

WAR = ZIP com a estrutura da aplicação web.

Use forms com method=“POST” ao invés de GET, para evitar cache da página.

A

bom, eu mudei pra post, mas nada se alterou na página…
Eu to dando uma organizada nos arquivos aki pra te mandar, mas não sei se consigo mandar war. Qualquer coisa pode ser .zip mesmo né?

danieldestro

To esperando!

A

Acabei de mandar os fontes para você
Grato
Guilherme

Criado 31 de agosto de 2004
Ultima resposta 1 de set. de 2004
Respostas 28
Participantes 4