vraptor

20

Click here to load reader

Upload: clauvane1708

Post on 06-Jun-2015

198 views

Category:

Technology


1 download

DESCRIPTION

Apresentação sobre os principais aspectos deste Framework MVC que esta cada vez mais conquistando a confiança do mercado.

TRANSCRIPT

Page 1: Vraptor

VraptorFrancisco Clauvane

Page 2: Vraptor

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

Page 3: Vraptor

1. Controller2. Component3. RestFul4. Validator5. Ajax-Json-JQuery6. Interceptor

Sumario

Page 4: Vraptor

@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

Page 5: Vraptor

@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

Page 6: Vraptor

@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

Page 7: Vraptor

@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

Page 8: Vraptor

@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

Page 9: Vraptor

@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

Page 10: Vraptor

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

Page 11: Vraptor

@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

Page 12: Vraptor

@Post("/produtos")public void adiciona(Produto produto) {

validator.validate(produto);validator.onErrorUsePageOf(this).formulario();dao.salva(produto);result.redirectTo(this).lista();

}

4-Validator

Page 13: Vraptor

<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

Page 14: Vraptor

<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

Page 15: Vraptor

@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

Page 16: Vraptor

@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

Page 17: Vraptor

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

Page 18: Vraptor

@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

Page 19: Vraptor

Duvidas

Page 20: Vraptor

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