Criei uma tag lib para gerar automaticamente um menu na minha aplicação e não posso passar dependencias pelo construtor pois quando o java tenta inicializa-la ele procura pelo construtor padrão.
Como posso implementar isso com VRaptor?
[RESOLVIDO] VRaptor injeção de dependencia via setter
8 Respostas
No menu padrão você não pode iniciar quem deve ser iniciado não?
<!-- alguns codigos -->
<%@ taglib uri="http://www.teste.com.br/framework/menu" prefix="menu" %>
<!-- header da pagina -->
<c:if test="${not empty usuarioWeb }">
${usuarioWeb.nome }
</c:if>
<menu:geraMenu /> <!-- aqui é chamado a taglib para gerar o menu -->
</body>
</html>
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
" http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>menu</shortname>
<uri>http://www.teste.com.br/framework/menu</uri>
<info>Gera Menu</info>
<tag>
<name>geraMenu</name>
<tagclass>com.taglib.MenuTag</tagclass>
<bodycontent>JSP</bodycontent>
<info>
Gera Menu para aplicação de acordo com os módulos cadastrados.
</info>
</tag>
</taglib>
//package imports
@Component
public class MenuTag extends TagSupport {
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(MenuTag.class);
private ModuloFacade moduloFacade; // <-- dependencia que quero injetar
public MenuTag(){
super();
}
public void setModuloFacade(ModuloFacade moduloFacade){
this.moduloFacade = moduloFacade;
}
@Override
public int doStartTag() throws JspException {
//codigo que gera o Menu
}
}
Opa, desculpe.
No caso seria Construtor padrão.
Mas agora entendi o que você queria dizer. Não sei como funciona injeção com VRaptor.
Dependendo do Objeto você poderia criar na unha.=/
Pensei em criar na unha sim, mas esse objeto recebe um dao e o dao recebe a session via dependencia, acho que iria ficar meio bagunçado por isso estou procurando um jeito de implementar via injeção.
não dá pra fazer isso pq não é o VRaptor quem instancia essa classe…
o que vc pode fazer é isso:
http://groups.google.com/group/caelum-vraptor/browse_thread/thread/5ce54b5c5437a884
dá uma olhada na classe Gambiarra… daí vc pode acessar o container e pedir a instância do que vc precisa. Use com cuidado 
Lucas, nesse meu caso meu facade chama um dao que utiliza uma session. Usando ApplicationScope essa session do hibernate ficaria aberta?
não, pq vc não vai usar application scope…
na hora que a tag é usada vc está dentro de um request
a ideia é criar a classe Gambiarra, não fazer aquilo na sua tag. Daí vc usa o container que está no contexto
Lendo o email eu tinha entendido que o ideal era passar minha Facade como dependencia no lugar do container, mas depois do que você explicou aqui utilizei o container e consegui receber a instancia correta dentro da classe da Tag.
Valewzão Lucas! 