God_of_Java, vantagem em relação a o que? sem uma referência sua afirmação é vazia, e não acrescenta nada na discussão nem na resposta das dúvidas das pessoas.
coloquei… gerou umas exceptions estranhas, depois voltei ao modo normal. rodou… so to tendo uns probleminhas com o ajax pra excuir e editar os contatos, provavelmente vou voltar em breve, mas muito obrigado pela ajuda;
agora… usando as anotações path,e tetando colocar o projeto, no padrão REST, anotei meus controllers… mas agora, com a as uri’s novas e tambem com as antigas, levo um 404; como ficaram meus controllers
package com.agenda.controller;
import java.util.List;
import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Put;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import com.agenda.dao.ContatoDAO;
import com.agenda.modelo.Contato;
@Resource
public class ContatosController {
private final ContatoDAO dao;
private final Result result;
public ContatosController(ContatoDAO dao, Result result) {
this.dao = dao;
this.result = result;
}
@Post @Path("/contatos")
public void adiciona(Contato contato) {
dao.adiciona(contato);
result.redirectTo(this).lista();
}
@Delete @Path("/contatos/{id}")
public void exclui(Long id) {
Contato contato = dao.carrega(id);
dao.exclui(contato);
result.redirectTo(this).lista();
}
@Put @Path("/contatos/{contato.id")
public void atualiza(Contato contato) {
dao.atualiza(contato);
result.redirectTo(this).lista();
}
@Get @Path("contatos/{id}")
public Contato edita(Long id){
return dao.carrega(id);
}
@Path("/produtos")
public List<Contato> lista() {
return dao.listaTudo();
}
@Get @Path("/contatos/novo")
public void formulario(){}
}
package com.agenda.controller;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import com.agenda.dao.UsuarioDAO;
import com.agenda.infra.UsuarioLogado;
import com.agenda.modelo.Usuario;
@Resource
public class LoginController {
private UsuarioDAO usuarioDao;
private UsuarioLogado usuarioLogado;
private Result result;
public LoginController(UsuarioDAO usuarioDao, UsuarioLogado usuarioLogado, Result result) {
this.usuarioDao = usuarioDao;
this.usuarioLogado = usuarioLogado;
this.result = result;
}
public void autentica(Usuario usuario) {
Usuario autenticado = usuarioDao.buscaUsuarioPorLoginESenha(usuario);
if (autenticado != null) {
usuarioLogado.efetuaLogin(autenticado);
result.redirectTo(ContatosController.class).lista();
return;
}
result.redirectTo(LoginController.class).formulario();
}
@Path("/")
public void formulario() {
}
}
tome cuidado com os verbos HTTP agora… por exemplo o método exclui só pode ser chamado com o verbo http DELETE ou com o parâmetro _method=DELETE (dentro de um post)
Meu post não tem muito a ver com tua dúvida, mas ao invés de usar um sistema proprio de login, porque você não usa JAAS? Assim vocẽ não precisa criar nada, basta configurar o serviço com o tipo de autenticação que você precisa (LDAP, banco de dados, certificado), indicar as roles, e tudo pronto.
sim. era um erro de digitação. mas agora; quando eu chamo meu formulario de entrada de contatos; recebo uma MethodNotAllowedException… estou fazendo uma confusão com os metodos http; olha a stack
17:23:58,372 DEBUG [VRaptor ] VRaptor received a new request
17:23:58,387 DEBUG [VRaptorApplicationContext] Cache miss for interface br.com.caelum.vraptor.http.EncodingHandler
17:23:58,396 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelum.vraptor.http.EncodingHandlerFactory
17:23:58,402 DEBUG [VRaptorApplicationContext] Cache miss for interface br.com.caelum.vraptor.core.RequestExecution
17:23:58,419 DEBUG [DefaultRequestExecution] executing stack DefaultRequestExecution
17:23:58,422 DEBUG [VRaptorApplicationContext] Cache miss for interface br.com.caelum.vraptor.interceptor.multipart.MultipartInterceptor
17:23:58,500 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor
17:23:58,516 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
17:23:58,516 DEBUG [DefaultResourceTranslator] trying to access /contatos/formulario
17:23:58,531 DEBUG [ResourceLookupInterceptor] Method GET is not allowed for requested URI. Allowed Methods are [PUT, DELETE]
br.com.caelum.vraptor.http.route.MethodNotAllowedException: Method GET is not allowed for requested URI. Allowed Methods are [PUT, DELETE]
at br.com.caelum.vraptor.http.route.DefaultRouter.routesMatchingUriAndMethod(DefaultRouter.java:110)
at br.com.caelum.vraptor.http.route.DefaultRouter.parse(DefaultRouter.java:83)
at br.com.caelum.vraptor.http.DefaultResourceTranslator.translate(DefaultResourceTranslator.java:59)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:64)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:550)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:380)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
17:23:58,532 DEBUG [VRaptor ] VRaptor ended the request
package com.agenda.controller;
import java.util.List;
import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Put;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import com.agenda.dao.ContatoDAO;
import com.agenda.modelo.Contato;
@Resource
public class ContatosController {
private final ContatoDAO dao;
private final Result result;
public ContatosController(ContatoDAO dao, Result result) {
this.dao = dao;
this.result = result;
}
@Post @Path("/contatos")
public void adiciona(Contato contato) {
dao.adiciona(contato);
result.redirectTo(this).lista();
}
@Delete @Path("/contatos/{id}")
public void exclui(String id) {
Contato contato = dao.carrega(id);
dao.exclui(contato);
result.redirectTo(this).lista();
}
@Put @Path("/contatos/{contato.id}")
public void atualiza(String id) {
Contato contato = dao.carrega(id);
dao.atualiza(contato);
result.redirectTo(this).lista();
}
@Get @Path("/contatos")
public List<Contato> lista() {
return dao.listaTudo();
}
@Get @Path("/contatos/novo")
public void formulario(){}
}