Dúvida com reflection+taglib  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
phstc
JavaGuru

Membro desde: 13/04/2004 12:22:22
Mensagens: 200
Localização: São Paulo, SP
Offline

Olá!

Pessoal,

Eu e um amigo estamos desenvolvendo uma taglib,
pensamos em fazer semelhante a "convenção" do struts,
onde passamos para a taglib o nome do objeto e por reflection ela invoca o metódo.

Exemplo:

Struts


Nossa tag


No caso do Struts, ele vai procurar,
um metódo getter para o "atributo", segundo a convenção Java,
portanto: Classe.getAtributo()

Fui fazer isso, mas por reflection a única maneira que achei,
foi pegar a primeira letra da property fazer um upper nela e concatenar:

"get" + UPPER(a) + "tributo" /*pseudo código*/

É isso mesmo???

Grato,
Pablo
[Email]
maxguzenski
Virtual Machine Man
[Avatar]

Membro desde: 07/03/2003 11:47:42
Mensagens: 549
Localização: Porto Alegre
Offline

caram tenho 99% de certeza q essa é a maneira correta...
mas como o struts é openSource nao custa nada olhar o codigo deles ne ?

Maximiliano Ferreira Guzenski
Sun Certified Java Programmer 1.4
Sun Certified Web Component Developer 1.4
http://www.guzenski.com.br
[Email] [WWW] [MSN]
kuchma
Moderador
[Avatar]

Membro desde: 17/01/2003 19:36:16
Mensagens: 1231
Localização: Curitiba - PR
Offline

phstc wrote:Fui fazer isso, mas por reflection a única maneira que achei,
foi pegar a primeira letra da property fazer um upper nela e concatenar:

"get" + UPPER(a) + "tributo" /*pseudo código*/


Quando precisei fazer, fiz dessa forma tambem...

Lembre-se de que metodos que retorna booleanos podem ter o getter no formato "isAtributo". Tendo isso em mente acabei mudando o esquema que estava fazendo na epoca... ao inves de passar o atributo e eu tentar pegar o getter, coloquei para ser passado diretamente o nome do metodo. Para o usuario nao muda muito e eh mais pratico, pois ele pode dar o nome que ele quiser para o metodo.

Se voce tem um ambiente controlado e pode garantir que nao ocorrerao conflitos de seguranca com o Security Manager, considere utilizar diretamente os atributos, sem passar pelo getter. Eh um negocio bacana que da pra fazer com reflection.


Marcio Kuchma
[WWW] [ICQ]
phstc
JavaGuru

Membro desde: 13/04/2004 12:22:22
Mensagens: 200
Localização: São Paulo, SP
Offline

maxguzenski wrote:caram tenho 99% de certeza q essa é a maneira correta...
mas como o struts é openSource nao custa nada olhar o codigo deles ne ?


Peguei os fontes do struts, não achei nada de concatenção, porém não entedi como eles, vou demais para mim

[Email]
phstc
JavaGuru

Membro desde: 13/04/2004 12:22:22
Mensagens: 200
Localização: São Paulo, SP
Offline

kuchma wrote:
phstc wrote:Fui fazer isso, mas por reflection a única maneira que achei,
foi pegar a primeira letra da property fazer um upper nela e concatenar:

"get" + UPPER(a) + "tributo" /*pseudo código*/


Quando precisei fazer, fiz dessa forma tambem...

Lembre-se de que metodos que retorna booleanos podem ter o getter no formato "isAtributo". Tendo isso em mente acabei mudando o esquema que estava fazendo na epoca... ao inves de passar o atributo e eu tentar pegar o getter, coloquei para ser passado diretamente o nome do metodo. Para o usuario nao muda muito e eh mais pratico, pois ele pode dar o nome que ele quiser para o metodo.

Se voce tem um ambiente controlado e pode garantir que nao ocorrerao conflitos de seguranca com o Security Manager, considere utilizar diretamente os atributos, sem passar pelo getter. Eh um negocio bacana que da pra fazer com reflection.


Marcio Kuchma



Nunca usei boolean com is, como ficaria? Sempre usei como qualquer getter e setter! Acho interessante passar pelo atributo, somente para manter o "padrão" adotado pelo struts!

Você diz usar atributos públicos???

[]'s,
Pablo
[Email]
kuchma
Moderador
[Avatar]

Membro desde: 17/01/2003 19:36:16
Mensagens: 1231
Localização: Curitiba - PR
Offline

phstc wrote:Você diz usar atributos públicos???


Primeiro vamos com esta.

Nao... voce pode usar atributos privados e ler seus conteudos via reflection, desde que o Security Manager nao barre isso (por default ele *nao* faz isso).

Veja:

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/AccessibleObject.html#isAccessible()
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/AccessibleObject.html#setAccessible(boolean)

Por isso que eu disse que eh bacana.

phstc wrote:Acho interessante passar pelo atributo, somente para manter o "padrão" adotado pelo struts!


Eh, faz sentido. Principio da menor surpresa - ou algo assim.

phstc wrote:Nunca usei boolean com is, como ficaria? Sempre usei como qualquer getter e setter!


Veja o isAccessible()/setAccessible(boolean) acima.


Marcio Kuchma

This message was edited 1 time. Last update was at 19/11/2004 13:26:34


E tu, Belém-Efrata, pequena demais para figurar como grupo de milhares de Judá, de ti me sairá o que há de reinar em Israel, e cujas origens são desde os tempos antigos, desde os dias da eternidade. Mq 5:2, Miquéias, 750 AC aprox.
[WWW] [ICQ]
andrejs
JavaTeenager
[Avatar]

Membro desde: 29/08/2003 15:50:29
Mensagens: 168
Localização: Jundiaí
Offline

Kuchma.

VC c poderia me dar um exemplo de como utilizar esse isAccessible()/setAccessible(boolean) .. Eu vi a api mas não consegui usar !! :ó(

Obrigado.

Abraços
Obrigadoooo
André J S
[Email] [ICQ]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team