Lançado VRaptor 3.1 e versão atualizada da Apostila FJ-28

42 respostas
sergiolopes

O VRaptor 3.1 acaba de ser lançado com muitas correções e melhorias. Agradecimento especial ao pessoal do GUJ que tanto tem colaborado com o crescimento do framework com sugestões e correções. E agradecimento aos mais de 4 mil downloads de toda a comunidade.

Junto com o lançamento, a Caelum acaba de disponibilizar a última versão da apostila FJ-28: Desenvolvimento Ágil para a Web 2.0 com VRaptor, Hibernate e AJAX atualizada para usar a nova versão do framework. Acesse já para fazer o download gratuito do material:

http://www.caelum.com.br/curso/fj-28-vraptor-hibernate-ajax/

Entre as novidades do VRaptor 3.1 destacamos:

Você pode ver o changelog completo aqui: http://vraptor.caelum.com.br/documentacao/changelog/
E baixar a nova versão do VRaptor aqui: http://vraptor.caelum.com.br/download.jsp

E, como sempre, todo feedback da comunidade, tanto quanto ao VRaptor quanto à Apostila, é muito bem-vindo!

42 Respostas

juniorsatanas

Sergio Lopes Boa Tarde !

Já estava até estudando JSF, mais agora volto para VRaptor 3 !
Além do VRaptor ser Maravilhoso e Brasileiro e tem um suporte Otimo aqui no Guj…
Só Falta o pessoal da DevMedia fazer um CRUD, já tem um do Menta…

Sergio Cadê os Fontes ?
Valeu !

Lucas_Cavalcanti

Os fontes do VRaptor estão disponíveis no vraptor-3.1.0.zip ou em http://github.com/caelum/vraptor

juniorsatanas

Lucas Cavalcanti Boa Tarde !

Estava citando o da loja virtual da apostila, não o do VRaptor 3

Lucas_Cavalcanti

dentro do zip da apostila tem o código inicial do projeto:
http://www.caelum.com.br/curso/fj-28-vraptor-hibernate-ajax/

se vc for seguir a apostila é só criar um projeto a partir do blank project, e copiar os arquivos do zip goodbuy-auxiliar

juniorsatanas

Lucas Cavalcanti Valeu estava fazendo isso…

Vamos ver no que da !

Abraço !

juniorsatanas

No NetBeans fica com uma estrutura horrível, nada haver com o padrão… ao importar para VRaptor3 o mydvds tem que apagar o web.xml, depois refazer etc…
No Eclipse fica tudo certinho ! era bom um plugin para VR3.

juniorsatanas

na apostila pg28 não falta a porta ?

 o XML, por mais que seja um pouco mais difícil em relação ao properties, permite que toda a configuração
seja feita nele. Por isso faremos nossa configuração no XML. O arquivo XML que o Hibernate procurará será o
hibernate.cfg.xml e ele deve estar no classpath.
    Para nosso caso, vamos seguir a convenção e criar o arquivo hibernate.cfg.xml na pasta src, dentro do
nosso projeto. O conteúdo do arquivo será esse:
<!DOCTYPE hibernate-configuration PUBLIC
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
     <session-factory>
          <property name="hibernate.connection.username">root</property>
          <property name="hibernate.connection.password"></property>
          <property name="hibernate.connection.url">jdbc:mysql://localhost/fj28</property>
          <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
          <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
          <property name="hibernate.hbm2ddl.auto">update</property>
          <property name="show_sql">true</property>
          <property name="format_sql">true</property>
     </session-factory>
</hibernate-configuration>
    As configurações que passamos nesse arquivo são parecidas quando queremos nos conectar a um banco
de dados. Para conectar em um banco de dados, precisamos informar qual é o usuário, a senha, algumas
informações do banco, como host, porta, etc.
    Um detalhe importante da nossa configuração é o banco de dados que foi passado. Na configuração
hibernate.connection.url foi passado o nome do database que utilizaremos. Para esse caso escolhemos
o database fj28.
    Abaixo segue a descrição de todas as configurações que usamos.
    ? hibernate.connection.username - usuário do banco de dados
    ? hibernate.connection.password - senha do usuário
    ? hibernate.connection.url - chamada de URL ou string de conexão, deve ser configurada de acordo com
      documentação do banco de dados
    ? hibernate.connection.driver_class - driver que deve ser utilizado
    ? hibernate.hbm2ddl.auto - como o hibernate vai se comportar em relação às tabelas do banco. Com o
      valor update ele vai criar ou modificar tabelas sempre que necessário.
    ? hibernate.dialect - dialeto a ser utilizado para a comunicação com o banco de dados
    ? show_sql - flag que indica se os SQLs gerados devem ser impressos
    ? format_sql - flag que indica se os SQLs devem ser formatados
                                      Capítulo 3 - Persistindo os dados com o Hibernate - Configurando o Hibernate - Página 6
juniorsatanas

no meu caso postgre…

para :

<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">debian23</property>
    <!-- CONFIGURANDO O HIbernate -->
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/NUTECBD</property>

   

       <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>

    <!-- USADO PELO HIBERNATE PARA SE COMUNICAR COM O BD  -->
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>

 <!-- CLASSES  -->

                    <mapping class="br.com.caelum.vraptor.mydvds.model.Dvd" />
 		<mapping class="br.com.caelum.vraptor.mydvds.model.DvdRental" />
 		<mapping class="br.com.caelum.vraptor.mydvds.model.User" />


  </session-factory>
 </hibernate-configuration>

Dúvida ?

GabrielCardelli

juniorsatanas:
No NetBeans fica com uma estrutura horrível, nada haver com o padrão… ao importar para VRaptor3 o mydvds tem que apagar o web.xml, depois refazer etc…
No Eclipse fica tudo certinho ! era bom um plugin para VR3.

Teu netbeans é mtu ruinzinho msm hein rs zoa mano!

juniorsatanas

Uma coisa estranha do MYDVDS, e que ele tem uma classe User, sempre da um erro referente ao SQL99 que é uma palavra reservada !
Se mudar o MYDVDS para usar bacno Postgree…
segue scree…

juniorsatanas

Mais não preciso ficar 7 dias atrás de plugins hahahahah que são incompatíveis entres se e a IDE - Brincando Mano ! —

ps : -risos-

juniorsatanas

no fim a classe ficou assim:

package br.com.caelum.vraptor.mydvds.model;

import java.io.Serializable;                      **************adicionado por mim **************
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;

import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;

import com.google.common.base.Function;
import com.google.common.collect.Collections2;

@Entity
@Component
@SessionScoped
public class Usuario implements Serializable {

	// Hibernate validator's annnotations/rules
	@Id
	@NotNull
	@Length(min = 3, max = 20)
	private String login;

	// Hibernate validator's annnotations/rules
	@NotNull
	@Length(min = 6, max = 20)
	private String password;

	// Hibernate validator's annnotations/rules
	@NotNull
	@Length(min = 3, max = 100)
	private String name;

	// user to dvd mapping,
	@OneToMany(mappedBy="owner")
	private Set<DvdRental> rents;

	public Set<DvdRental> getRents() {
		if (rents == null) {
			rents = new HashSet<DvdRental>();
		}
		return rents;
	}

	public void setRents(Set<DvdRental> dvds) {
		this.rents = dvds;
	}


	public Set<Dvd> getDvds() {
		return new HashSet<Dvd>(Collections2.transform(getRents(), new Function<DvdRental, Dvd>() {
                                          @Override
			public Dvd apply(DvdRental copy) {
				return copy.getDvd();
			}
		}));
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}
juniorsatanas

agora foi :

init:
deps-module-jar:
deps-ear-jar:
deps-jar:
compile-single:
run-main:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/junior/vraptor-mydvds-3.1.0/WebContent/WEB-INF/lib/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/junior/sges-v3/glassfish/modules/bean-validator.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/junior/sges-v3/glassfish/modules/weld-osgi-bundle.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.

    alter table DvdRental 
        drop constraint FK7F97B9B6126E7F4D

    alter table DvdRental 
        drop constraint FK7F97B9B6BBEC2ABC

    drop table Dvd

    drop table DvdRental

    drop table Usuario

    drop sequence hibernate_sequence

    create table Dvd (
        id int8 not null,
        description varchar(255),
        title varchar(255),
        type varchar(255),
        primary key (id)
    )

    create table DvdRental (
        id int8 not null,
        dvd_id int8,
        owner_login varchar(20),
        primary key (id)
    )

    create table Usuario (
        login varchar(20) not null,
        name varchar(100) not null,
        password varchar(20) not null,
        primary key (login)
    )

    alter table DvdRental 
        add constraint FK7F97B9B6126E7F4D 
        foreign key (owner_login) 
        references Usuario

    alter table DvdRental 
        add constraint FK7F97B9B6BBEC2ABC 
        foreign key (dvd_id) 
        references Dvd

    create sequence hibernate_sequence
CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)
juniorsatanas

erro, se alguém souber do que se trata !!

ajuda !

HTTP Status 500 -

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

br.com.caelum.vraptor.InterceptionException: org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [from User u where u.login = :login and u.password = :password]

note The full stack traces of the exception and its root causes are available in the GlassFish v3 logs.
GlassFish v3
Lucas_Cavalcanti

o nome da entidade é Usuario, e não User… vc precisa mudar os HQLs dos daos

juniorsatanas

Ok to fazendo isso Obrigado !

juniorsatanas

Tecnicamente para rodar no postgree era somente por o drive e mudar o hibernate.cfg.xml não era ?

Lucas_Cavalcanti

por o jar do driver no WEB-INF/lib, mudar o hibernate.cfg.xml e criar as tabelas no banco

juniorsatanas

Eu achava que era isso… tenta ai !

juniorsatanas

olha que coisa estranha :

init:
undeploy-clean:
deps-clean:
do-clean:
Deleting directory /home/junior/vraptor-mydvds-3.1.0/build
check-clean:
clean:
init:
deps-module-jar:
deps-ear-jar:
deps-jar:
Created dir: /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/classes
Copying 10 files to /home/junior/vraptor-mydvds-3.1.0/build/web
Copying 60 files to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF
library-inclusion-in-archive:
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
Copying 1 file to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/lib
library-inclusion-in-manifest:
Created dir: /home/junior/vraptor-mydvds-3.1.0/build/empty
Compiling 18 source files to /home/junior/vraptor-mydvds-3.1.0/build/web/WEB-INF/classes
/home/junior/vraptor-mydvds-3.1.0/src/br/com/caelum/vraptor/mydvds/controller/DvdsController.java:52: cannot find symbol
symbol  : method onErrorUsuario(java.lang.Class<capture#734 of ? extends br.com.caelum.vraptor.view.PageResult>)
location: interface br.com.caelum.vraptor.Validator
                validator.onErrorUsuario(Results.page()).of(UsuarioController.class).home();
                         ^
/home/junior/vraptor-mydvds-3.1.0/src/br/com/caelum/vraptor/mydvds/controller/DvdsController.java:67: cannot find symbol
symbol  : method usuario(java.lang.Class<br.com.caelum.vraptor.view.LogicResult>)
location: interface br.com.caelum.vraptor.Result
                result.usuario(Results.logic()).redirectTo(UsuarioController.class).home();
                      ^
/home/junior/vraptor-mydvds-3.1.0/src/br/com/caelum/vraptor/mydvds/controller/HomeController.java:48: cannot find symbol
symbol  : method onErrorUsuario(java.lang.Class<capture#201 of ? extends br.com.caelum.vraptor.view.PageResult>)
location: interface br.com.caelum.vraptor.Validator
                validator.onErrorUsuario(Results.page()).of(HomeController.class).login();
                         ^
/home/junior/vraptor-mydvds-3.1.0/src/br/com/caelum/vraptor/mydvds/controller/HomeController.java:53: cannot find symbol
symbol  : method usuario(java.lang.Class<br.com.caelum.vraptor.view.LogicResult>)
location: interface br.com.caelum.vraptor.Result
                result.usuario(Results.logic()).redirectTo(UsuarioController.class).home();
                      ^
/home/junior/vraptor-mydvds-3.1.0/src/br/com/caelum/vraptor/mydvds/controller/HomeController.java:59: cannot find symbol
symbol  : method usuario(java.lang.Class<br.com.caelum.vraptor.view.LogicResult>)
location: interface br.com.caelum.vraptor.Result
            result.usuario(Results.logic()).redirectTo(HomeController.class).login();
                  ^
/home/junior/vraptor-mydvds-3.1.0/src/br/com/caelum/vraptor/mydvds/interceptor/AuthorizationInterceptor.java:58: cannot find symbol
symbol  : method usuario(java.lang.Class<br.com.caelum.vraptor.view.LogicResult>)
location: interface br.com.caelum.vraptor.Result
                    result.usuario(logic()).redirectTo(HomeController.class).login();
                          ^
6 errors
/home/junior/vraptor-mydvds-3.1.0/nbproject/build-impl.xml:405: The following error occurred while executing this line:
/home/junior/vraptor-mydvds-3.1.0/nbproject/build-impl.xml:228: Compile failed; see the compiler error output for details.
FALHA NA CONSTRUÇÃO (tempo total: 4 segundos)
package br.com.caelum.vraptor.mydvds.controller;

import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.ioc.ComponentFactory;
import br.com.caelum.vraptor.mydvds.dao.DefaultUsuarioDao;
import br.com.caelum.vraptor.mydvds.dao.UsuarioDao;
import br.com.caelum.vraptor.mydvds.interceptor.UsuarioInfo;
import br.com.caelum.vraptor.mydvds.model.Usuario;
import br.com.caelum.vraptor.validator.Validations;
import br.com.caelum.vraptor.view.Results;


@Resource
public class HomeController {

    private final Result result;
    private final Validator validator;
    private final UsuarioInfo usuarioInfo;
	private final UsuarioDao dao;

	
	public HomeController(UsuarioDao dao, UsuarioInfo usuarioInfo, Result result, Validator validator) {
	    this.dao = dao;
		this.result = result;
	    this.validator = validator;
        this.usuarioInfo = usuarioInfo;
	}

	@Post
	public void login(String login, String password) {
		// search for the usuario in the database
		final Usuario currentUsuario = dao.find(login, password);

		validator.checking(new Validations() {{
		    that(currentUsuario, is(notNullValue()), "login", "invalid_login_or_password");
		}});
		validator.onErrorUsuario(Results.page()).of(HomeController.class).login();

		// the login was valid, add usuario to session
		usuarioInfo.login(currentUsuario);
	
		result.usuario(Results.logic()).redirectTo(UsuarioController.class).home();
	}

	public void logout() {
	    usuarioInfo.logout();
	    // after logging out, we want to be redirected to home index.
	    result.usuario(Results.logic()).redirectTo(HomeController.class).login();
	}
	
	@Get
	public void login() {
	}

}
package br.com.caelum.vraptor.mydvds.controller;

import static br.com.caelum.vraptor.mydvds.validation.CustomMatchers.notEmpty;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;

import org.apache.log4j.Logger;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.interceptor.multipart.UploadedFile;
import br.com.caelum.vraptor.mydvds.dao.DvdDao;
import br.com.caelum.vraptor.mydvds.interceptor.UsuarioInfo;
import br.com.caelum.vraptor.mydvds.model.Dvd;
import br.com.caelum.vraptor.mydvds.model.DvdRental;
import br.com.caelum.vraptor.validator.Validations;
import br.com.caelum.vraptor.view.Results;


@Resource
public class DvdsController {

	private static final Logger LOG = Logger.getLogger(DvdsController.class);

    private final Result result;
    private final Validator validator;
    private final UsuarioInfo usuarioInfo;
	private final DvdDao dao;

	public DvdsController(DvdDao dao, UsuarioInfo usuarioInfo, Result result, Validator validator) {
		this.dao = dao;
		this.result = result;
        this.validator = validator;
        this.usuarioInfo = usuarioInfo;
	}

	@Path("/dvds")
	@Post
	public void add(final Dvd dvd, UploadedFile file) {
	    validator.checking(new Validations() {{
		    that(dvd.getTitle(), is(notEmpty()), "login", "invalid_title");
		    that(dvd.getType(), is(notNullValue()), "name", "invalid_type");
		    that(dvd.getDescription(), is(notEmpty()), "description", "invalid_description");
		    that(dvd.getDescription().length() >= 6, "description", "invalid_description");
		}});

		validator.onErrorUsuario(Results.page()).of(UsuarioController.class).home();

		// is there a file?
		if (file != null) {
		    // usually we would save the file, in this case, we just log :)
			LOG.info("Uploaded file: " + file.getFileName());
		}

		dao.add(dvd);
		dao.add(new DvdRental(usuarioInfo.getUsuario(), dvd));

		// you can add objects to result even in redirects. Added objects will
		// survive one more request when redirecting.
		result.include("notice", dvd.getTitle() + " dvd added");

		result.usuario(Results.logic()).redirectTo(UsuarioController.class).home();
	}

	
	@Path("/dvds/{dvd.id}")
	@Get
	public void show(Dvd dvd) {
	    result.include("dvd", dvd);
	}

 
	@Path("/dvds/search")
	@Get
	public void search(Dvd dvd) {
        if (dvd.getTitle() == null) {
            dvd.setTitle("");
        }

        result.include("dvds", this.dao.searchSimilarTitle(dvd.getTitle()));
    }

}
package br.com.caelum.vraptor.mydvds.interceptor;

import static br.com.caelum.vraptor.view.Results.logic;

import java.lang.reflect.Method;
import java.util.Arrays;

import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.mydvds.controller.HomeController;
import br.com.caelum.vraptor.mydvds.controller.UsuarioController;
import br.com.caelum.vraptor.mydvds.dao.UsuarioDao;
import br.com.caelum.vraptor.resource.ResourceMethod;
import br.com.caelum.vraptor.validator.ValidationMessage;


@Intercepts
public class AuthorizationInterceptor implements Interceptor {


	private final UsuarioInfo info;
	private final UsuarioDao dao;
	private final Result result;

	public AuthorizationInterceptor(UsuarioInfo info, UsuarioDao dao, Result result) {
		this.info = info;
		this.dao = dao;
		this.result = result;
	}

              @Override
    public boolean accepts(ResourceMethod method) {
        return notLogin(method) && notNewusuario(method);
    }

    private boolean notNewusuario(ResourceMethod method) {
        Method invokedMethod = method.getMethod();
        if (invokedMethod.getDeclaringClass().equals(UsuarioController.class)) {
            return !"add".equals(invokedMethod.getName()) && !"usuarioAdded".equals(invokedMethod.getName());
        }
        return true;
    }

    private boolean notLogin(ResourceMethod method) {
        return !method.getMethod().getDeclaringClass().equals(HomeController.class);
    }

              @Override
    public void intercept(InterceptorStack stack, ResourceMethod method, Object resourceInstance)
            throws InterceptionException {
    	
    	if (info.getUsuario() == null) {
    		
    		result.include("errors", Arrays.asList(new ValidationMessage("usuario is not logged in", "usuario")));
    		result.usuario(logic()).redirectTo(HomeController.class).login();
    	} else {
	    	dao.refresh(info.getUsuario());
	    	// continues execution
	    	stack.next(method, resourceInstance);
    	}
    }

}
juniorsatanas

da erro nas linhas:

validator.onErrorUsuario(Results.page()).of(UsuarioController.class).home();
result.usuario(Results.logic()).redirectTo(UsuarioController.class).home();
validator.onErrorUsuario(Results.page()).of(HomeController.class).login();
result.usuario(Results.logic()).redirectTo(UsuarioController.class).home();
result.usuario(Results.logic()).redirectTo(HomeController.class).login();
result.usuario(logic()).redirectTo(HomeController.class).login();

sabe deus o que é isso !

jbmsegundo

Que tal criar uma thread para trata dos seus problemas mais especificos e deixar essa so para os comentarios referentes a NOTICIA.

D

Só uma critica construtiva, se me permitirem. É interessante colocarem também as bibliografias.

D

Só mais um detalhe, se me permitirem. Poderiam imitar o Spring MVC e criar uma tag form de modo a colocar o method PUT, DELETE (por exemplo). Por trás, haveria uma conversão para POST na renderização e geraria um hidden com PUT.

Paulo_Silveira

Boa ideia. Esta no road map a taglip pro vraptor, ai ajuda ter isso e colocar um _method=PUT/DELETE quando voce quiser que o method seja outro

juniorsatanas

jbmsegundo Bom dia !

Não era a intenção ! anotado !

Abraço !

lelodois

:smiley:
Ótimo framework, cada vez mais fácil de implementar!!!

Abs

B

juniorsatanas, tem um fórum de suporte ao VRaptor aqui no GUJ: http://www.guj.com.br/forums/show/23.java

Parabéns à equipe do VRaptor e da Caelum toda. O framework é um dos mais avançados que existem no mercado, e o FJ-28 é uma das melhores apostilas, ponta de lança no que há de mais novo.

juniorsatanas

Bruno Laturner Bom dia !

Eu dei uma olhada !

Valeu.

G

Junior, o que você acha de lançar suas dúvidas em um tópico específico dentro do sub-forum do vraptor? Esse tópico é sobre a notícia do lançamento, assim fica mais organizado. Ficou muito chato ver um monte de códigos com dúvidas espalhadas em um tópico sobre uma noticia, na qual penso que deveriamos discutir apenas a notícia. Administradores, dá para editar esse tópico removendo esses posts não relacionados?

Enfim, que ótima notícia. Tenho gostado muito de trabalhar com o vraptor, e sinto orgulho de termos um framework tão poderoso feito por brasileiros. O trabalho está excelente, e a cada dia que passa fica melhor ainda. E pela movimentação do fórum noto que crescem o número de pessoas experimentando o vraptor e tirando dúvidas.

Outro dia recebi uma PM de um colega aqui do fórum dizendo que queria muito saber das empresas aqui no RS que usam vraptor, pois ele queria muito usá-lo. Infelizmente eu não tinha essa informação, hehe. Mas isso mostra o quanto o projeto está crescendo e cada vez mais pessoas têm interesse em usá-lo.

Eu estive testando o build que o Paulo me passou por email semana passada, e me surpreendi com as novas features. Destaco o fato de você poder serializar XML ou JSON transparente seja via Results.xml/json ou via representation, sendo esse último meu preferido.

Quanto aos Paths, gostei muito da sugestão do Lavieri de usar o path na classe e os métodos herdarem esse comportamento. Isso facilita muito e proporciona cada vez menos códigos, além de simplicidade. Paths com regex então… agora eu vou a loucura, hahahaha!

Os atalhos são quase desnecessários, mas ajuda muito a economizar código, tornando mais simples ainda os códigos escritos.

Tenho acompanhado o vraptor desde os tempos do 2.6; e o desenvolvimento do 3.x está fantástico. Parabéns ao pessoal da Caelum pelo excelente trabalho, principalmente ao Paulo e o Lucas que estão sempre dispostos a ouvir nossas criticas, sugestões e relatos de bugs. E principalmente por nos disponibilizar de forma tão aberta o vraptor.

Abraços galera.

juniorsatanas

garcia-jj tudo bom !?

Já o fiz !

valeu.

C

Parabéns ao pessoal do desenvolvimento do VR!
Li a apostila em menos de 1 hora e tive a sensação mesmo de produtividade devido as facilidades de configurações - ou ausência. Apostila didática e muito bem elaborada!!
Não vejo a hora de programar com VR.

G

Eu ví que tem um subprojeto novo por lá chamado vraptor gae? Vocês optaram por fazer como eu tinha levantado a questão outro dia de fazer um jar para ser adicionado quando o vraptor for usado no GAE?

Notei também que o suporte ao pico está em depreciated. Há planos para usar outro container, guice por exemplo, ou usar only-spring?

Lucas_Cavalcanti

colocamos o pico como deprecated pq ele não adiciona nenhuma vantagem…

o spring adiciona a possisbilidade de usar qqer componente do spring junto com o vraptor…

o guice adicionaria algumas coisas tb… então acho que a gente vai implementar um provider do guice algum dia sim… mas se vc quiser se aventurar a implementá-lo, daremos toda a ajuda necessária, e ficaríamos mto agradecidos :wink:

Paulo_Silveira

Garcia, em especial comecou a ficar extremamente trabalhoso manter as duas implementacoes.

Andre_Fonseca

Parabens! Baixando a apostila!

Y

Parabéns ao pessoal do VRaptor.

Estou trabalhando em um módulo de segurança para o VRaptor… em breve estarei postando minha solução para que todos avaliem.

juniorsatanas

yuriX , adianta para nós sobre esse seu trabalho no VRaptor !

Leonardo_Gloria

Pessoal da Caelum, Parabens, baixando e segunda feira brincar com o VRaptor.
Ao amigo Paulo Silveira,que tinha falado a um tempo atras q tava saindo do forno, agradecimentos especiais!=)
[]s!
Leonardo Gloria

felipepagliuco

Alguém da uma ajuda ou sabe algum material como importa esse projeto com WTP no eclipse???

Já andei procurando e nada! Quando o projeto é importado ele já vem com todos o .jars necessários do classpath??

Lucas_Cavalcanti

esse projeto que vc fala é o blank project ou o wtp?

se sim, basta descompactar em algum lugar o zip do site, ir em File>>Import>>Existing projects into workspace e selecionar o lugar onde vc descompactou…

assim já vai ficar tudo funcionando, pronto pra usar.

felipepagliuco

A tá ok brigado pela Ajuda funcionou, Desculpe postei a pergunta no local errado mais de tudo certo.

Criado 13 de janeiro de 2010
Ultima resposta 20 de jan. de 2010
Respostas 42
Participantes 15