[resolvido] vraptor com sitemesh - minificando html

Olá pessoal,

Estou tentando obter a string do html gerado em uma requisição com um responseWrapper.
A ordem de execução dos meus Filters está: SiteMeshFilterCustom -> VRaptorCustom.doFilter() …

Estou criando o responseWrapper dentro de um CustomFilterSiteMesh, vou mostrar o código:

[code]@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;

System.out.println("req.getRequestURI(): " + req.getRequestURI());
ConpressionResponseWrapper responseWrapper = new ConpressionResponseWrapper(resp);

super.doFilter(request, responseWrapper, chain);

System.out.println("CONTENT:" + responseWrapper.getContent());

}[/code]

O output dos sysouts:

[code]req.getRequestURI(): /login
req.getRequestURI(): /WEB-INF/jsp/index/loginForm.jsp
CONTENT:
<script>
$(document).ready(function() { … });
</script>
<div id=“divFormularioLogin”>
<form action="/login" name=“form” method=“post”>
<div class=“field”>
<input type=“text” name=“usuario.email” title=“email” />
</div>

  &lt;div class="field"&gt;
    &lt;input type="password" name="usuario.senha" title="senha" /&gt;
  &lt;/div&gt;

  &lt;div class="contentCenter"&gt;
    &lt;button class="botao" type="submit"&gt;Entrar&lt;/button&gt;
    <a  >Criar conta</a>
  &lt;/div&gt;
  
&lt;/form&gt;

</div>
CONTENT:

<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8” />
<title>My App</title>
<link type=“text/css” href="/stylesheets/all.min.css" rel=“stylesheet” />
<script type=“text/javascript” src="/javascripts/all.min.js"></script>
</head>
<body>
<div id=“wrapper”>
<div id=“headerWrapper”>
<div id=“login_menu”>

	  	&lt;/div&gt;
	&lt;/div&gt;
	
  	&lt;div id="content"&gt;
  		&lt;div id="validationBox"&gt;
  			&lt;span id="caixaDeValidacao"&gt;&lt;/span&gt;
  			&lt;span id="caixaDeInformativos"&gt;
  				
  			&lt;/span&gt;
  		&lt;/div&gt;
	    
  	&lt;/div&gt;
&lt;/div&gt;

</body>
</html>
[/code]

Repare que:
Ele passa primeiro e duas vezes do primeiro sysout.
Depois ele passa as outras duas vezes no segundo sysout.
E detalhe, um outro comportamento do sitemesh que eu não entendi.
Ele não fez o merge entre minha jsp e meu decorator em apenas uma requisição… Precisou de duas requisições, uma para chamar o jsp e outra pra chamar o decorator.

Estou querendo pegar esse conteúdo completo para minificar meus html em tempo de execução… Não preciso fazer necessáriamente assim, se alguém quiser aconselhar uma outra forma, pode ser. :slight_smile:

Obrigado!

então, o que acontece é o seguinte: a requisição que chega no servidor e passa pelo seu filtro: /login, depois o vraptor faz um forward pra jsp, que bate de novo no seu filtro… como o sitemesh usa outro jsp como template, é outro forward, daí passa pelo seu filtro de novo.

o que vc pode fazer é:

  • fazer o seu filtro só passar em *.jsp, ou
  • deixar só o dispatch de REQUEST, assim o filtro não vai passar nos forwards.

Lucas, exatamente isso.
Fiz a segunda alternativa, coloquei dispatch só pra REQUEST.

vergonha dessa ‘scwcd’ aí na assinatura, por que eu já tinha estudado isso. Faltou a prática…

Obrigado!