Click here to load reader
Upload
clauvane1708
View
198
Download
1
Embed Size (px)
DESCRIPTION
Apresentação sobre os principais aspectos deste Framework MVC que esta cada vez mais conquistando a confiança do mercado.
Citation preview
VraptorFrancisco Clauvane
Esta apresentacao tem como base o conhecimento adquirido atraves da apostila fj28 da caelum, a minha experiencia e as dicas dadas por profissionais mais experientes.
Sobre
1. Controller2. Component3. RestFul4. Validator5. Ajax-Json-JQuery6. Interceptor
Sumario
@Resourcepublic class Mundo {
public String boasVindas(){return "Ola Mundo";
}
public List<String> getPaises(){List<String> listaDePaises = new ArrayList<String>();listaDePaises.add("Brasil");listaDePaises.add("Argentina");listaDePaises.add("Chile");listaDePaises.add("Venezuela");
return listaDePaises;}
}
1-Controller
@Resourcepublic class ProdutosController {
private final ProdutoDao dao;private final Result result;private final Validator validator;
public ProdutosController(ProdutoDao dao, Result result, Validator validator) {
this.dao = dao;this.result = result;this.validator = validator;
}
1-Controller
@Componentpublic class ProdutoDao {
private Session session;
public ProdutoDao(Session session) {this.session = session;
}
public void salva(Produto produto) {Transaction transaction = session.beginTransaction();session.save(produto);transaction.commit();
}
2-Component
@Componentpublic class CriadorDeSessao implements ComponentFactory<Session> {
private final SessionFactory sessionFactory;private Session session;public CriadorDeSessao(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;}@PostConstructpublic void abre(){
session = sessionFactory.openSession();}public Session getInstance() {
return session;}@PreDestroypublic void fecha(){
session.close();}
}
2-Component
@Component@ApplicationScopedpublic class CriadorDeSessionFactory implements ComponentFactory<SessionFactory>{
private SessionFactory sessionFactory;@PostConstructpublic void abre(){
AnnotationConfiguration annotationConfiguration = new AnnotationConfiguration();
annotationConfiguration.configure("hibernate.cfg.xml");sessionFactory = annotationConfiguration.buildSessionFactory();
}public SessionFactory getInstance() {
return sessionFactory;}@PreDestroypublic void fecha(){
sessionFactory.close();}
}
2-Component
@Get("/produtos/{id}")public Produto edita(Long id) {
return dao.getProduto(id);}
@Post("/produtos")public void adiciona(Produto produto) {
validaFormulario(produto);dao.salva(produto);result.redirectTo(this).lista();
}@Put("/produtos/{produto.id}")public void altera(Produto produto) {
validaFormulario(produto);dao.atualiza(produto);result.redirectTo(this).lista();
}@Delete("/produtos/{id}")public void remove(Long id) {
Produto produto = dao.getProduto(id);dao.remove(produto);result.redirectTo(this).lista();
}
3-RestFul
public void adiciona(final Produto produto) {if (produto.getNome() == null ||produto.getNome().length() < 3) {validator.add(new ValidationMessage("Nome é obrigatório e precisa ter mais de 3 letras", "produto.nome"));}if (produto.getDescricao() == null ||produto.getDescricao().length() > 40) {validator.add(new ValidationMessage("Descrição é obrigatória não pode ter mais que 40 letras", "produto.descricao"));}if (produto.getPreco() <= 0) {validator.add(new ValidationMessage("Preço precisa ser positivo", "produto.preco"));}validator.onErrorUsePageOf(ProdutosController.class).formulario();dao.salva(produto);result.redirectTo(this).lista();}
4-Validator
@NotNull(message = "O campo <b>nome</b> precisa ser preenchido!")@Length(min = 3, message = "O campo <b>nome</b> deve possuir no
minimo 3 caracteres!")private String nome;
@NotNull(message = "O campo <b>descricao</b> precisa ser preenchido!")
@Length(max = 40, message = "O campo <b>descricao</b> deve possuir no maximo 40 caracteres!")
private String descricao;
@NotNull(message = "O campo <b>preco</b> precisa ser preenchido!")@Min(value = 0, message = "O campo <b>preco</b> nao pode ser
negativo!")private Double preco;
4-Validator
@Post("/produtos")public void adiciona(Produto produto) {
validator.validate(produto);validator.onErrorUsePageOf(this).formulario();dao.salva(produto);result.redirectTo(this).lista();
}
4-Validator
<script type="text/javascript" src=".../jquery-1.3.2.min.js"></script><script type="text/javascript" src=".../jquery.validate.min.js"></script>
<form id="produtosForm" action="<c:url value="/produtos"/>"method="POST">...<script type="text/javascript">$('#produtosForm').validate({rules: {"produto.nome": {required: true,minlength: 3},"produto.descricao": {required: true,maxlength: 40},"produto.preco": {min: 0.0}}});</script>
4-Validator
<form action="<c:url value="/produtos/busca"/>"><input id="busca" name="nome" /></form><script type="text/javascript">$("#busca").puts("Busca produtos por nome");$("#busca").autocomplete('/goodbuy/produtos/busca.json', {dataType: "json",parse: function(produtos) {return $.map(produtos, function(produto) {return {data: produto,value: produto.nome,result: produto.nome};});},formatItem: function(produto) {return produto.nome + "(" + produto.preco + ")";}});</script>
5-Ajax-Json-JQuery
@Get("/produtos/busca.json")public void buscaJson(String q) {
result.use(json()).withoutRoot().from(dao.busca(q)).exclude("id", "descricao").serialize();
}
5-Ajax-Json-JQuery
@Interceptspublic class AutorizacaoInterceptor implements Interceptor{
private final UsuarioWeb usuario;private final Result result;
public AutorizacaoInterceptor(UsuarioWeb usuario, Result result) {this.usuario = usuario;this.result = result;
}
public boolean accepts(ResourceMethod method) {return !usuario.isLogado() && method.containsAnnotation(Restrito.
class);}
public void intercept(InterceptorStack arg0, ResourceMethod arg1,Object arg2) throws InterceptionException {
result.redirectTo(UsuarioController.class).loginForm();}
}
6-Interceptor
import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD) public @interface Restrito {
}
6-Interceptor
@Restrito@Post("/produtos")public void adiciona(Produto produto) {
dao.salva(produto);result.redirectTo(this).lista();
}@Restrito@Get("/produtos/novo")public void formulario() {}@Restrito@Get("/produtos/{id}")public Produto edita(Long id) {
return dao.getProduto(id);}@Restrito@Put("/produtos/{produto.id}")public void altera(Produto produto) {
dao.atualiza(produto);result.redirectTo(this).lista();
}@Restrito@Delete("/produtos/{id}")public void remove(Long id) {
Produto produto = dao.getProduto(id);dao.remove(produto);result.redirectTo(this).lista();
}
6-Interceptor
Duvidas
http://www.caelum.com.br/download/caelum-java-web-vraptor-hibernate-ajax-fj28.pdfhttp://www.caelum.com.br/download/caelum-java-web-fj21.pdf
https://github.com/clauvanehttps://github.com/rponte
Bibliografia