Tag <c:set />, atributo scope (SCWCD)  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
g4j
GUJ Ranger
[Avatar]

Membro desde: 02/05/2007 14:32:03
Mensagens: 816
Localização: Curitiba
Offline

Pessoal,

Encontrei uma ocasião aqui em meus estudos, que não achei no livro "Use a Cabeça - Servlet & JSP":

isso:

Não funciona!!

Erro:


Ou seja, o atributo scope só funciona junto com o atributo "var" e não com "target".


This message was edited 1 time. Last update was at 21/08/2008 15:55:51


Gerson Luiz Chagas

SCJP 5.0
SCWCD 5.0

gk-bgh
JavaGuru

Membro desde: 27/04/2007 22:42:28
Mensagens: 200
Offline

Esta certo...

Achei isso na API


scope java.lang.String Scope for var.

Bacharel em Ciência da Computação PUC Minas.
Cursando Pós-Graduação em Administração de Empresas na Fundação Getúlio Vargas
Sun Certified Associate for Java Platform
Sun Certified Java Programmer 5.0
Sun Certified Web Component Developer 5.0
g4j
GUJ Ranger
[Avatar]

Membro desde: 02/05/2007 14:32:03
Mensagens: 816
Localização: Curitiba
Offline

hehe... não deve ser tão importante assim para a prova, senão eles mencionavam no livro...

descobri por acaso, fazendo testes...

Gerson Luiz Chagas

SCJP 5.0
SCWCD 5.0

victorwss
JWizard
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline

scope junto com target não faz sentido.

target diz qual variável será mexida, e seja qual for, ela já tem um escopo definido. Não faz sentido tentar alterar o escopo dela!

Victor Williams Stafusa da Silva

Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.

Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.

Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.


É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).


Se você escreve "concerteza", "concerteza" você andou matando aulas de português.
[MSN]
g4j
GUJ Ranger
[Avatar]

Membro desde: 02/05/2007 14:32:03
Mensagens: 816
Localização: Curitiba
Offline

Alterar o escopo não, mas alterar uma variavel de determinado escopo faz sentido, é exatamente o que <c:set var> faz, se tem uma variavel no escopo é substituída, não vejo o real motivo de <c:set target> não ter scope. Ou estou perdendo algo aí no conceito...

Gerson Luiz Chagas

SCJP 5.0
SCWCD 5.0

victorwss
JWizard
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline

g4j wrote:Alterar o escopo não, mas alterar uma variavel de determinado escopo faz sentido, é exatamente o que <c:set var> faz, se tem uma variavel no escopo é substituída, não vejo o real motivo de <c:set target> não ter scope. Ou estou perdendo algo aí no conceito...


Vamos supor que haja uma variável "foo" no request e uma "foo" no session.

Se você setar com <c:set var="foo" blablabla/>, então eve vai colocar a variável naquele escopo não importando se já existia uma outra no lugar.
<c:set var="foo" scope="session" var="${requestScope.foo}"/> por exemplo, cria uma variável foo no session com o valor da variável foo do request. Apesar de ter o mesmo nome, são variáveis diferentes.

Mas, no target isso não ocorre, pois o scope é o escopo onde a variável vai ser COLOCADA e não de onde ela vai ser lida. Deste forma, <c:set target="${requestScope.foo}" value="xxx" scope="session"/> Tentaria pegar a variável foo do request e colocá-la no session com o valor xxx. Mas isso implica em criar uma nova variável e não setar ela. (se o requestScope for omitido acaba dando na mesma porque o container vai tentar procurar a variável do menor para o maior escopo até encontrar, mas seja lá em qual for o escopo que ele a encontre, a variável não pode ser colocada em um escopo diferente).

E por sinal, mudar o escopo de uma variável é absurdo. Este exemplo mostra que se isso fosse possível, haveriam efeitos colaterais muito estranhos:



No segundo c:out, a variável misteriosamente teria mudado de escopo como efeito colateral de ter recebido um novo valor, algo que é no mínimo indesejável.

Victor Williams Stafusa da Silva

Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.

Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.

Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.


É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).


Se você escreve "concerteza", "concerteza" você andou matando aulas de português.
[MSN]
g4j
GUJ Ranger
[Avatar]

Membro desde: 02/05/2007 14:32:03
Mensagens: 816
Localização: Curitiba
Offline

Acho que saquei.

A idéia de <c:set> com "target" é somente mudar o valor de uma variável que já existe, não importando qual "scope". Se o valor de target calcular pra null dá erro...

Já <c:set> com "var" pode criar variáveis caso não exista no escopo definido, sobrescrever o seu valor, ou ainda excluir do escopo caso o atributo já exista no escopo, passando um valor null em "value".

mais ou menos por ai?

Gerson Luiz Chagas

SCJP 5.0
SCWCD 5.0

 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team