Como validar uma sessão no struts e como usar dispath Action

3 respostas
S

E aí galera beleza?
TEnho 2 duvidas sobre struts.
Uma delas é o seguinte: eu quero criar um action que seje herdado por todos os outros actions, para que a validação de seçcão seja feita apenas nele. Mas pelo que eu estava pensando vou ter que criar um método nesse método pai que recebe como parametro um request e ele faz a verificação da sessão mas, o problema é que todo action vai ter que chamar esse método aí acho que não fica legal. Gostaria que de alguma forma quando eu chamasse um filho do action acima, fosse verificada a sessão sem que eu explicitamente precesasse ficar chamando métodos do action pai.

A outra duvida é: Quando eu estou utilizando o DispatchAction para eu poder chamar um método no action, no atributo parameter do struts-config, o valur que4 coloco não é o nome do método e sim o nome do parametro que vai receber como valou o nome do método, tipo se eu quiser chamar o método selecionaUsuarios na action eu tenho que passar por get parametro=selecionaUsiarios. Isso é ruim, eu gostaria de colocar o nome do método no atributo parameter do struts-config e quando chamar o .do correspondente cair nesse método, sem passar nada no get.
Não se se fui muito claro nas minhas duvidas mas se puderem me ajudar eu agradeço. Obrigado!

3 Respostas

I

Olá. Podes criar um filtro que implemente HttpSessionListener. Assim:

public class SessionCop implements Filter, HttpSessionListener {

    public void init(FilterConfig filterConfig) {}
    public void doFilter(ServletRequest req, ServletResponse res,
        FilterChain chain) { }
    public void destroy() {}

    public void sessionCreated(HttpSessionEvent se) {}
    public void sessionDestroyed(HttpSessionEvent se) {}

}

No segundo caso tu acaba caindo na implementação de Action´s simples, porque tu não precisa especificar nome de método. De qualquer forma desconheço se isto pode ser usado internamente pelo struts-config ao invéz de passar explicitamente pela URL (algo híbrido, se entendi) Se tu descobrir se há uma maneira de fazer isto posta aí.

T+

G

eu recomendaria o pattern template method. Nele você definiria o seguinte:

Action Pai:

execute(args) {

//Faz as validações e regras de negocio necessárias

//como iniciar transações e etc…

performAction(args);

//Trata exceptions e comita transações

}

abstract performAction(args);

Assim vc implementaria o performAction em todas as actions filhas. :slight_smile:

S

E aí galera beleza?

Então gconcon, parace interessante esse patern, vou dar uma estudada pra ver se entendo melhor.

Agora quanto ao filtro iktuz, se eu o fizer em todas as minhas actions vou ter que criar um objeto filter e verificar se true dou um sucess se false dou um failure?
não tem como eu usando o filtro, na propria classe pai eu dar um failure no caso de false e em caso de true permitir o action filhor continuar? Ou dessa forma vou ter que extender o ActionServlet?

Agora quanto ao parameter, uma vez eu vi isso mas não sei como foi implementado mas, no caso o cara colocava o nome do metodo mesmo no parameter do action mapping e no link só chamava o action mesmo.
Vou ver certinho, se eu não estava bebado na hora e for verdade eu posto como é.ehehehehh

Valeu galera!

Criado 27 de outubro de 2006
Ultima resposta 27 de out. de 2006
Respostas 3
Participantes 3