Bom dia pessoal. Estou com um problema que é o seguinte:
Tenho uma aplicacao jsp + struts 1.x que tem o seguinte cenario:
Minha pagina JSP contem uma tag que envia como parametro um codigo para ser realizado uma consulta no banco de dados.
<html:link action="/pages/licitacao/proposta/EnviarProposta.do?idLicitacao=${pregao.id}">Enviar Proposta</html:link>
Tudo que estiver dentro desse caminho (/pages/licitacao/proposta/*) meu filtro vai entrar em acao e vai pedir para o usuario se logar, ou seja a partir desse link que apontei para a action o controller vai requisitar o filtro e vai pedir para logar, assim que ele se logar ele vai para a Action que retira o parametro que foi enviado pela tag, efetua a consulta e armazena o objeto retornado pela consulta no scopo da sessao, para depois esse objeto que foi passado no scopo da sessao ser impresso no jsp. Acontece que na primeira vez que acesso o sistema esse objeto que foi passado no scopo da sessao esta null, mas eu debuguei a aplicacao e no meu servlet ele esta correto, ou seja, a consulta no banco ocorre normalmente. E se eu fechar a aba e depois acessar denovo ele funciona. O que pode ser? Vou passar o codigo do filtro e do action…
Quando o cliente clica na tag <html:link action="/pages/licitacao/proposta/EnviarProposta.do?idLicitacao=${pregao.id}">Enviar Proposta</html:link>
ele vai para :
<action
path="/pages/licitacao/proposta/EnviarProposta"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward
name="success"
path="/pages/licitacao/proposta/EnviarProposta.jsp"/>
<forward
name="failure"
path="/pages/errors/ErrorEnvioProposta.jsp"/>
<forward
name="errorConsultaPregaoEnvioProposta"
path="/pages/errors/ErrorEnvioProposta.jsp"/>
</action>
Que verifica que precisa se logar:
<filter-mapping>
<filter-name>Acesso</filter-name>
<url-pattern>/pages/licitacao/proposta/*</url-pattern>
</filter-mapping>
Veja o filtro:
[code]
public class LoginAcesso implements Filter {
private FilterConfig config;
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpSession session = ((HttpServletRequest)req).getSession();
Usuario user = (Usuario) session.getAttribute("usuario");
if (user == null) {
((HttpServletRequest)req).setAttribute("msg", "Senhor Usuario, voce nao esta logado, favor entrar com login e senha respectivos");
RequestDispatcher view = ((HttpServletRequest)req).getRequestDispatcher("/pages/licitacao/Login.jsp");
view.forward(req, resp);
} else {
chain.doFilter(req, resp);
}
}
public void init(FilterConfig config) throws ServletException {
this.config = config;
}
}[/code]
E o meu Action que efetua a consulta:
[code]
public class EnviarPropostaAction extends Action {
private PregaoService pregaoService;
public void setPregaoService(PregaoService pregaoService) {
this.pregaoService = pregaoService;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// TODO Auto-generated method stub
ActionMessages messages = new ActionMessages();
Pregao pregao = null;
try {
pregao = this.pregaoService.consultaPorIdPregao(Pregao.class, Long.parseLong(request.getParameter("idLicitacao")));
HttpSession session = request.getSession();
session.setAttribute("pregao", pregao);
if (session == null) {
System.out.println("novo");
}
} catch (Exception e) {
messages.add("errorPregaoEnvioPropostaVazio", new ActionMessage("error.envio.pregao.proposta.vazio"));
saveErrors(request, messages);
return mapping.findForward("errorConsultaPregaoEnvioProposta");
}
if (messages.isEmpty()) {
return mapping.findForward("success");
} else {
return mapping.findForward("failure");
}
}
}[/code]
Se alguem me ajudar ficarei grato.