Vraptor dúvida de iniciante

15 respostas
Luiz-SP

Olá Pessoal,

Tenho esse jsp dentro do diretório ../web-inf/product/form.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Formul&aacute;rio</title>
</head>
<body>
   <form  action="add">
   Nome: <input name="product.name"/></br>
   Descri&ccedil;&atilde;o: <input name="product.description"/></br>
   Pre&ccedil;o: <input name="product.price"/></br>
   Data de in&iacute;cio de venda: <input name="product.startSaleDate"/> </br>
   <input type="submit"/>
   </form>
</body>
</html>

e o seguinte controler:

package br.com.controleproduto.controller;

import java.util.List;

import br.com.caelum.vraptor.Resource;
import br.com.controleproduto.dao.ProductDAO;
import br.com.controleproduto.modelo.Product;

@Resource
public class ProductController {

	public void add(Product p) {
		ProductDAO.getInstance().add(p);
	}

	public void update(Product p) {
		ProductDAO.getInstance().update(p);
	}
	
	public void form(){
		
	}
	
	public List<Product> list(){
		return ProductDAO.getInstance().list();
	}
}

Minha dúvida é para que ele adicionasse a um objeto product no banco e fosse para o jsp ../web-inf/product/add.jsp eu não deveria usar a action do formulário igual a "/product/add ?

15 Respostas

R

Isso depende da forma que tu mapeaste teu método.

Pro teu exemplo funcionar o método add deveria estar assim:

@Path("/add")
 public void add(Product product) {  
         ProductDAO.getInstance().add(product);  
     }

Note também a mudança no nome da variável passada como argumento ao método.

Mr_Arthur

cara,

tá certo… para adicionar um produto você deve usar a url “/product/add”… Mas cuidado, passando a url dessa forma, você não está passando o nome da sua aplicação.
tente usar <c:url value="/product/add" /> no atributo action do seu form.

valeu.

Mr_Arthur

Se bem que olhando agora…
O teu action do form está certo. Poderia falar que erro está acontencendo?

Valeu.

Luiz-SP

Mr_Arthur:
Se bem que olhando agora…
O teu action do form está certo. Poderia falar que erro está acontencendo?

Valeu.

O que eu não entendo é que pelo que eu li da documentação, o action do form deveria ser “/product/add” e não só add.
Outra coisa, quando eu tento acessar a aplicação no endereço “http://localhost:8181/controle-produtos/” eu vejo uma mensagem dizendo: we should not see this. Embora o IndexController estaja assim:

package br.com.caelum.produtos.controller;

import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;


@Resource
public class IndexController {

	@Path("/")
	public void index() {

	}

}

Ou seja, eu acho que ele deveira mostrar o “web-inf/jsp/index/index.jsp” que está assim:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Controle de Produtos</title>
</head>
<body>
	<h2>Pagina inicial do Sistema de Controle de Produtos</h2>
</body>
</html>
Mr_Arthur

Eu não sei se isso acontece…
Mas as vezes você pode estar com um no seu web.xml apontando pra esse arquivo index.jsp. Isso redireciona direto para ela sem chamar o vraptor (não sei se isso acontece mesmo…)
Retire o e tente denovo.

valeu.

D

O nome da sua aplicação é controle-produtos?, vc não precisa acessar com o nome, o vraptor vai indicar para:
http://localhost:8181/

Isso porque vc esta localmente.

Outra coisa no no seu form, assim como LuizClaudio falou, deve ter o mesmo o nome da variavel que vc recebe como no name do seu input, no caso:

ou

Mais nesse caso vc deveria trocar o nome do parametro do seu metodo add.

@Path("/add")
public void add(Product product){}

Outra coisa é o @Path(“add”), nesse caso não vai para /product/form.jsp.
Tenta fazer assim:

@Resource
public class ProductController{
   @Path("/product")
   public void form(){}
   
  @Path("/product/add")
   public void add(Product product){}
}

E no seu form altera a action para "/product/add"
Isso deve resolver o seu problema.

Lucas_Cavalcanti

vc está com o filtro do vraptor registrado no web.xml?

Luiz-SP

Pelo que li essas anotações são opcionais! Na verdade a aplicação não tem um problema… eu só tô tentando endenter melhor as coisas…pq o action válido no form foi “add” ao invés de “product/add”.

Luiz-SP
Lucas Cavalcanti:
vc está com o filtro do vraptor registrado no web.xml?

Meu web.xml está assim:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">

	<context-param>
        <param-name>br.com.caelum.vraptor.packages</param-name>
        <!-- Change this parameter to your app base package -->
        <param-value>br.com.caelum.produtos</param-value>
    </context-param>
    
	<filter>
		<filter-name>vraptor</filter-name>
		<filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>vraptor</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>REQUEST</dispatcher>
	</filter-mapping>

	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
</web-app>
Lucas_Cavalcanti

pode tirar o context-param

habilita o log de debug do vraptor e posta aqui o que aparece por favor?

Luiz-SP

Lucas Cavalcanti:
pode tirar o context-param

habilita o log de debug do vraptor e posta aqui o que aparece por favor?

Como habilito esse log, tá fazendo maior falta!

Mr_Arthur

Se você tiver um arquivo log4j.xml
altere o level do logger do vraptor para “DEBUG”

edit: pode ser um .properties também.

Lucas_Cavalcanti

tem um arquivo de exemplo no blank-project…

coloque na pasta src

MetriusDemom

Caros, aproveitando a disponibilidade do Lucas e o tópico, estou com a index.html aparecendo… para mim o filter do Vraptor é acionado, mas não toma ação…
Sou iniciante, fiz o teste com o projeto blank da Caelum em um PC e rodou perfeitamente… agora que fui para o meu mac, em uma nova workspace com o mesmo projeto (só) começou a ir para a este html… diferença drastica, no pc era java 1.5 e no mac 1.6… fora isso alguém imagina o que poderia ser…

VRaptor Log

00:14:09,693 DEBUG [VRaptor ] VRaptor received a new request
00:14:09,827 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
00:14:09,827 DEBUG [DefaultResourceTranslator] trying to access /
00:14:09,834 DEBUG [VRaptor ] VRaptor ended the request

Lucas_Cavalcanti

ele mostrou o log das rotas? tipo:

/       ......IndexController
Criado 14 de outubro de 2010
Ultima resposta 8 de mar. de 2012
Respostas 15
Participantes 6