Oi pessoal! o/
A minha aplicação está crescendo, e ai começam a aparecer aqueles problemas de código duplicado, e como quero evitar isso, queria saber como posso resolver esta questão.
Tenho um método para visualizar a galeria de fotos, está em FotoController, o método se chama “view”, então ele chama uma JSP view lá na pasta foto. Esta JSP está com CSS para que os usuários logados visualizem, menú personalizado e CSS personalizado.
Acontece que preciso outro método view na INDEX, onde o CSS e o menu é outro, para clientes que visitam a página, ai pensei, se for nadando junto com a maré, era só fazer um método “view” igualzinho na IndexController e chamar uma JSP view na pasta index. Ou seja, código duplicado, dois métodos iguais nos dois Controllers e duas JSPs cuja diferença seria apenas o CSS e o menú.
Como poderia resolver essse tipo de problema no VRaptor??
Abraço!!!
tem vários jeitos…
se vc tá usando algum gerenciador de templates, tipo o sitemesh, vc faria o mesmo jsp pras duas lógicas e page decorators diferentes…
vc pode extrair a parte de conteúdo da jsp em um outro jsp (ou jspf) e incluir nas duas jsp das view usando <%@ include file="…" %>
vc pode usar ifs nas jsps (meio gambi)
se for só em poucas lógicas, a tática da extração do conteudo da jsp é a mais simples e elegante
se for em muitas, talvez usar sitemesh (ou coisa do tipo) seja melhor, daí vc separa as suas jsps do layout e design da página
Pelo título pensei que encontraria algo sobre delegate, command, observer… :lol:
Opa!
Segui a sua dica Lucas, adicionei o jar do sitemesh na /lib, segui o manual do sitemesh, criando o sitemesh.xml:
<?xml version="1.0" encoding="UTF-8"?>
<sitemesh>
<property name="decorators-file" value="/WEB-INF/decorators.xml" />
<excludes file="${decorators-file}" />
<page-parsers>
<parser content-type="text/html"
class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
<parser content-type="text/html;charset=ISO-8859-1"
class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
</page-parsers>
<decorator-mappers>
<mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
<param name="config" value="${decorators-file}" />
</mapper>
</decorator-mappers>
</sitemesh>
E na WEB-INF/web.xml adicionei o conteúdo:
<!-- SiteMesh -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Criei a pasta decorators em WebContent, e adicionei um pedaço do site que é o header:
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Imobiliária</title>
<decorator:head />
</head>
<body>
<div id="tudo">
<div id="topo">
<div id="borda_topo"></div>
<a href="/imobiliaria/"><img src="${pageContext.request.contextPath}/imagens/aplication/logo.png" alt="Volta para página inicial" /></a>
<div id="img_topo"></div>
</div>
<decorator:body />
</div>
</body>
</html>
Coloquei a tag para chamar na index.jsp:
<decorator:head></decorator:head>
Ao chamar a aplicação está dando erro 404 sem nenhuma saida no console., sabe o que pode ser?
Abraço!!
Talvez a ordem dos filtros. O Lucas pode te dizer melhor a ordem correta deles, se não me engano vraptor deve estar antes.
Oi Garcia! \o/
Eu tinha colocado o sitemesh em último lá na web.xml, o legal é que não acontece nada, o bicho morreu!
Será que precisa de alguma configuração específica pra trabalhar com o VRaptor? Achei uma dica pra VRaptor2 e é td código antigo, não serve pra VRaptor 3.
Sinceramente eu não sei o que fazer quando há dois filter a serem usados. O Lucas sabe melhor disso.
Há um tópico, que você pode pesquisar, onde o Lucas dá uma sugestão sobre o Spring Security com Vraptor3. Nesse post ele cita a ordem correta, se é vraptor primeiro ou Spring Security.
Acabei de achar a dica do Lucas no calopsita:
Ele colocou os filters do sitemesh antes do VRaptor, foi o que eu fiz aqui e não deu boa não.
cadê o seu decorators.xml?
dá uma olhada no calopsita, e veja os arquivos necessários…
a única coisa de diferente que tem é uma customização dele pra tratar diferentes os metodos http, mas o resto é igual…
o decorators.xml é o que fala qual decorator vai decorar qual url
[]'s
Cheguei da faculdade, liguei a máquina rodei a aplicação e agora deu sinal de vida! Não sei o motivo, mas td bem. =)
Tô lendo a doicumentação e pelo que entendi, além de uma index.jsp na pasta jsp que terá os dados, eu terei uma outra index.jsp dentro de /decorators que servirá como esqueleto da index, estou certo?? Ai migro todo o css (divs com id’s e outras tags com “class”) pra index.jsp que está na pasta /decorators, correto?
Abraço!
algo assim =)
Valeu Lucas! o/
Tá funcionando aqui, agora é questão de aprender a usá-lo.
Abraço!