Framework MVC Francisco do Nascimento PSC - Programação de Softwares Corporativos UNIBRATEC, novembro de 2008 Arquitetura MVC MVC + Front Controller Frameworks Struts - http://struts.apache.org Mentawai - http://www.mentaframework.org Tapestry - http://tapestry.apache.org/tapestry5 WebWork - http://www.opensymphony.com/webwork Neo Framework - http://www.neoframework.org Spring MVC - http://www.springframework.org/ JSF - http://java.sun.com/javaee/javaserverfaces/ VRaptor - http://www.vraptor.com.br Sobre VRaptor Projeto Open Source Desenvolvido pelo pessoal da Caelum Framework voltado para desenvolvimento ágil e de alta produtividade Baseado no conceito de ‘Convenção ao invés de Configuração’ Configurando o ambiente Baixar do site a última versão http://www.vraptor.com.br/download.jsp Adicionar os .jar baixados a pasta WEBINF\lib do seu projeto Acrescentar ao web.xml: <servlet> <servlet-name>vraptor2</servlet-name> <servlet-class>org.vraptor.VRaptorServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>vraptor2</servlet-name> <url-pattern>*.logic</url-pattern> </servlet-mapping> Lógica do VRaptor (Controller) Utiliza componentes para executar as lógicas de negócio (Controller) Adicionar @Component na classe ABCLogic @Component public class UsuarioLogic{ public void buscar(){ } } Acessando a lógica de negócio no Controller http://localhost:8080/nomeProjeto/controlador.metodo.logic controlador metodo Nome da classe sem o ‘Logic’ e primeira letra minúscula. Valor da string definida no annotation Component @Component(“nomelogica”) Nome do método a ser executado logic Definido no web.xml Exemplo: http://localhost:8080/projeto/usuario.buscar.logic View Controller direciona para um view (jsp) de nome ‘metodo.ok.jsp’ na pasta ‘componente’. Retorno condicional Retornar uma String no método da lógica que servirá de sufixo no nome do JSP no lugar do ‘ok’. Redirecionamento Podemos definir outro direcionamento para ser utilizada após a execução da lógica no arquivo de propriedades: views.properties Passagem de parâmetros // http://localhost:8080/projeto/usuario.excluir.logic?id=10 @Component public class UsuarioLogic{ @Parameter int id; public void excluir(){ Fachada.getInstance().excluirUsuario(id); } } Passagem de objetos: View > Controller <FORM ACTION=usuario.salvar.logic> Nome: <input type=text name=us.nome> Idade: <input type=text name=us.idade> <input type=submit value=Salvar> </FORM> @Component public class UsuarioLogic{ public void salvar(Usuario us){ Fachada.getInstance().inserir(us); } } Passagem de objetos: Controller > View http://.../projeto/usuario.buscar.logic?id=5 @Component public class UsuarioLogic{ @Out(scope=ScopeType.SESSION) private Usuario usuario; public void buscar(int id){ this.usuario = Fachada.getInstance() .consultar(id); } } <!– web/usuario/buscar.ok.jsp --> <FORM ACTION=usuario.salvar.logic> Nome: <input type=text name=us.nome value=“${usuario.nome}”> Idade: <input type=text name=us.idade value=${usuario.idade}> <input type=submit value=Salvar> </FORM> Referências http://www.vraptor.com.br http://www.caelum.com.br/downloads/apostila/caelu m-java-web-fj28.pdf http://www.vraptor.org/pt/first-example.html http://celodemelo.wordpress.com/2007/05/12/vantag ens-do-vraptor/ http://www.lucas.hgt.nom.br/wordpress/?p=14