Struts - Action não está sendo instanciado a cada request. [+- resolvido]

Pessoal,

Não estou entendendo porque o Action q estou escrevendo não está sendo instanciado a cada request. Está sendo instanciado uma vez apenas. Nas vezes seguintes que chamo uma url mapeada para tal Action, ele não é instanciado novamente. Eis as configurações:

<action
				attribute="form"
				parameter="method"
				path="/basico_cargo"
				scope="request"
				type="br.com.viamentor.sicof.struts.action.basico.CargoAction"
				validate="false">
				<forward name="lista" path="/jsp/basico/CargoLista.jsp" />
				<forward name="carrega" path="/jsp/basico/Cargo.jsp" />
			</action>

Meu Action está herdando de DispatchAction. E eu preciso de atributos de instância para um Action em cada request. Porém percebi um comportamento estranho e, pra testar, criei um construtor no-args e coloquei um breakpoint lá… ele só é chamado uma vez mesmo.

Por exemplo, o primeiro uso do Action é quando eu chamo um método que desenha a tela lista. Lá tem uma lista de entidades que, ao selecionar um, eu invoco o Action para chamar um método que vai desenhar a tela carrega. Só que ele usa a mesma instância do Action que foi usada para desenha a tela de lista e isso não pode acontecer na minha aplicação, devido aos atributos de instância.

O que estou estranhando é que no struts-config, no mapeamento, eu coloquei scope=“request” mas não tá funcionando (se é que é essa a idéia desse atributo).

Alguém tem alguma idéia?

[]'s

Esse é o comportamento padrão do Struts, instanciar a Action apenas uma vez.

Por isso, você não deve colocar variáveis de instância nas actions. Procure armazenar os objetos nos contextos de request/session/application.

[quote=carneiro]Esse é o comportamento padrão do Struts, instanciar a Action apenas uma vez.

Por isso, você não deve colocar variáveis de instância nas actions. Procure armazenar os objetos nos contextos de request/session/application.[/quote]

A org.apache.struts.action.ActionServlet, que vai controlar as solicitações do Struts, é instanciada uma única vez… até aih tudo bem… mas eu preciso que os Actions que eu escrevo para processar um request sejam instanciados sempre que há um novo request. Não tem como configurar isso?

No seu caso se a aplicação estiver recebendo dados de um ActionForm por exemplo, vc pode subscrever o método reset e instanciar o que você precisa nesse método reset, assim ele limpa os objetos que você usou no request anterior…

Seria isso?

[quote=leandros]No seu caso se a aplicação estiver recebendo dados de um ActionForm por exemplo, vc pode subscrever o método reset e instanciar o que você precisa nesse método reset, assim ele limpa os objetos que você usou no request anterior…

Seria isso?[/quote]

Não seria isso…

Na verdade, são atributos de controle que a arquitetura que estou desenvolvendo vão utilizar… então, pra eu não precisar ficar passando toda vez como argumento nos métodos do action, eu estava colocando-o em um atributo de um Action e os Actions que eu escrevo herdavam esses atributos.

Mas eu já decidi passá-los como argumento mesmo e, como são muitos, criei uma classe que encapsula todos os atributos e na assinatura do método, só tem um argumento.

Vou renomear o título para “[± resolvido]” só pq a dúvida do tópico não foi respondida. Se alguém responder, apenas como curiosidade, renomearei o tópico para “[resolvido]”.

Valeu a todos.