Oi amigos,
Estou migrando meu sistema que usava apenas Servlet para struts e estou com o seguinte problema:
Antes de usar struts eu Tinha uma classe chamada FiltroConexao que implementava Filter. Lá eu criava minha conexão, pendurava na requisição e na minha classe adicionaCompromissoServlet eu usava o seguinte código:
//....Connectionconexao=(Connection)req.getAttribute("conexao");// Acessa o bancoCompromissoDAOdao=newCompromissoDAO(conexao);dao.insere(compromisso);//....
O problema é que agora uso struts e não mais servlets. Minha action ficou assim:
publicclassAdicionaCompromissosAction{privateCompromissocompromisso;@Action(value="adicionaCompromisso",results={@Result(name="ok",location="/compromisso-adicionado.jsp")})publicStringexecute(){//Aqui eu deveria pegar a conexão e injetá-la no DAOnewCompromissoDAO(?????????).adiciona(compromisso);return"ok";}publicCompromissogetCompromisso(){returncompromisso;}publicvoidsetCompromisso(Compromissocompromisso){this.compromisso=compromisso;}}
Minha pergunta é: Como devo fazer agora para pegar minha conexão na requisição e injetá-la no DAO através do construtor???
Criar um atributo Connection e seus respectivos getters e setters na action.
Criei um atributo Connection e seus respectivos getters e setters na action, mas dando NullPointerException.
Criei um Filtro, onde penduro a conexão na requisição e declarei no web.xml. O código segue abaixo:
publicclassFiltroConexaoimplementsFilter{@OverridepublicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{try{Connectionconexao=newConnectionFactory().getConnection();req.setAttribute("conexao",conexao);System.out.println("pendurei na requisição...");chain.doFilter(req,res);System.out.println("Vou fechar a conexão...");conexao.close();}catch(SQLExceptione){thrownewServletException(e);}}@Overridepublicvoiddestroy(){}@Overridepublicvoidinit(FilterConfigarg0)throwsServletException{}}
Não consigo perceber onde estou errando.
von.juliano
Você pode criar um interceptor para isso, que além de Interceptor implemente ServletRequestAware, para que o struts tê de acesso ao request.
E usa as tags code, ninguém vai ler seu código se não usar.
G
ghostnf
von.juliano:
Você pode criar um interceptor para isso, que além de Interceptor implemente ServletRequestAware, para que o struts tê de acesso ao request.
E usa as tags code, ninguém vai ler seu código se não usar.
Obrigado pela dica das tags! Realmente faz toda diferença!
Usando Filtro e um atributo do tipo Connection com get e set na Action não seria suficiente para pegar essa conexão de volta na requisição?