SpringMVC - session.getAttribute()

Caros, estou desenvolvendo uma aplicação, que já possui a camada view, na verdade é um refactoring.

Tudo ía bem quando tinha Velocity, deu um trabalho para configurar, mas bastava eu recuperar o command com o nome que tinha setado no controller e estava tudo certo, exemplo:

  public ModelAndView doShowAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, CardifException,Exception {
        FileTypeBean  command = new FileTypeBean();
        //TODO: try catch
        this.bind(request,command);
        FileTypeBean  bean = null;
        bean=(FileTypeBean )this.ibusiness.doShowAll(command);
        return new ModelAndView("fileTypeShow","command",bean);
    }

Bom num terminado ponto, minha aplicação não vai mais apontar para o viewResolver do Velocity e sim do JSTL e meu código precisa ser alterado para algo similar :


 public ModelAndView doShowAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, CardifException,Exception {
        ThreadsMappingBean command = new ThreadsMappingBean();
        //TODO: try catch
        this.bind(request,command);
        ThreadsMappingBean bean = null;
        bean=(ThreadsMappingBean)this.ibusiness.doShowAll(command);
        request.setAttribute("Threads",bean.getThreads());
        request.setAttribute("ThreadsStatus",bean.getThreadsStatus());
        return new ModelAndView("threadsMappingShow","command",bean);
    }

Pergunta, como faço para usar o session.getAttribute() diretamente na minha JSP ?

Isso pq estou com diversos scriplets que estão programados dessa maneira.

Nem sempre poderei voltar um command bean, em alguns casos eu estarei apenas setando valores para o objeto request.

Grato,

Kenobi

Considerando que você pode usar Expression Language no JSP:

${sessionScope.nomeDaVariavel}

[quote=Maurício Linhares]Considerando que você pode usar Expression Language no JSP:

${sessionScope.nomeDaVariavel}[/quote]

Só uma coisa, eu devia estar dormindo, não vi que estava lidando com request, não ía funcionar nunca :slight_smile:

requestScope hehe … outra coisa, eu sempre tenho que trabalhar com EL ? Pq senão vou ter q modificar todos meus jsps, não tem uma maneira de configurar o spring ?

Valews !! :slight_smile:

Só se você botar eles no model and view. Ou fizer um filtro que faça isso.

Olá Maurício,

Exemplificando meu problema, tenho uma página JSP com o seguinte código:

<%
  Vector vThreads = (Vector) session.getAttribute("Threads");
  Hashtable hThreads = (Hashtable) session.getAttribute("ThreadsStatus");
%>

Tem como eu capturar o que vem do Controller do SpringMVC sem eu mudar absolutamente nada no meu jsp ? Sem trabalhar com EL e nada disso …

TKS

PS: Já tenho toda a camada view pronta, não queria mexer nessa questão.

Olá Maurício,

Exemplificando meu problema, tenho uma página JSP com o seguinte código:

<%
  Vector vThreads = (Vector) session.getAttribute("Threads");
  Hashtable hThreads = (Hashtable) session.getAttribute("ThreadsStatus");
%>

Tem como eu capturar o que vem do Controller do SpringMVC sem eu mudar absolutamente nada no meu jsp ? Sem trabalhar com EL e nada disso …

TKS

PS: Já tenho toda a camada view pronta, não queria mexer nessa questão. [/quote]
acho que só se vc fizar assim:

public ModelAndView doShowAll(HttpServletRequest request, HttpServletResponse response,ThreadsMappingBean command) throws ServletException, CardifException,Exception { ThreadsMappingBean bean = null; bean=(ThreadsMappingBean)this.ibusiness.doShowAll(command); request.getSession().setAttribute("Threads",bean.getThreads()); request.getSession().setAttribute("ThreadsStatus",bean.getThreadsStatus()); return new ModelAndView("threadsMappingShow","command",bean); }
o esquema do terceiro parametro é legal (isto é um MultiActionController né?, se não for esquece o terceiro parametro que eu coloquei ali)

mas eu não acho legal usar session desta maneira não, usar session demais sempre causa problemas de escalabilidade na aplicação.

se eu entendi bem a duvida o esqueam é este mesmo.

só uma observação, mesmo a view sendo JSP, tu pode passar os valores pelo modelandview, que eles vão aparecer como atributos do request na JSP.

se eu não entendi explica melhor qual é a duvida :smiley:

Olá Maurício,

[code]
<%
Vector vThreads = (Vector) session.getAttribute(“Threads”);
Hashtable hThreads = (Hashtable) session.getAttribute(“ThreadsStatus”);
%>

[/code] [/quote]

Como o urubatan disse, isso é meio perigoso, sem chances de fazer um refactoring?

Se isso só acontece NESSE controller, você pode fazer como o urubatan mostrou, simplesmente passar os objetos pra session, já se isso (com esses mesmos parâmetros) aparecem em vários controllers diferentes, é melhor você fazer um filtro que pegue esses atributos e coloque na sessão ANTES de executar o controller.

Olá Maurício,

[code]
<%
Vector vThreads = (Vector) session.getAttribute(“Threads”);
Hashtable hThreads = (Hashtable) session.getAttribute(“ThreadsStatus”);
%>

[/code] [/quote]

Como o urubatan disse, isso é meio perigoso, sem chances de fazer um refactoring?

Se isso só acontece NESSE controller, você pode fazer como o urubatan mostrou, simplesmente passar os objetos pra session, já se isso (com esses mesmos parâmetros) aparecem em vários controllers diferentes, é melhor você fazer um filtro que pegue esses atributos e coloque na sessão ANTES de executar o controller.[/quote]

Caros, obrigado pelo auxílio. Acabei resolvendo como segundo parâmetro.
O Pau que estava tomando era do include JSP

 <jsp:include page="/Inc_Top" flush="true" />

, mudei para JSTL - <c:import url="../includes/inc_top.jsp" /> e funcionou direitinho. 

Obrigado pelo auxílio :slight_smile: