Aonde estou errando com o Vraptor ?[SOLVED]

24 respostas
aix

Ola, juro que estou me esforçando para usar este framework, mas a cada versão toda vez que vou testar é uma briga para funcionar, não sei se é porque venho do JSF, mas vamos la, peguei la a apostila Fj28 e neste exemplo não consigo exibir na view os resultados:

quando acesso no browser http://localhost:8084/lojavirtual/jsp/mundo/boasVindas erro 404, se coloco.jsp no final da URL carrega o jsp sem exibir os dados com a EL
se crio um método void la qualquer com um system.out, ele funciona como deveria sai impresso no console.
apenas não consigo exibir na view, se alguem puder ajudar agradeço, pois quero adotar o uso deste framework achei a ideia muito show, ele é bom eu tenho certeza disso, é algum detalhe que estou deixando passar, abraços.

package br.com.lojavirtual;

import br.com.caelum.vraptor.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Dilnei Cunha
 */
@Resource
public class Mundo {

    public String boasVindas() {
        return "Ola Mundo!!!";
    }

    public List<String> paises() {
        List<String> result = new ArrayList<String>();
        result.add("Brasil");
        result.add("Portugal");
        result.add("Japão");
        result.add("Canadá");
        result.add("Paraguai");
        return result;
    }
}

JSP:

<body>
        O que vem do método:
        ${string}
        <p></p>
        os Paises:
        ${stringList}
    </body>

webxml:

<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>

24 Respostas

Guevara

Olá!
Vc deve chamar o método do Controller, então ficaria assim:

http://localhost:8084/lojavirtual/mundo/paises

Para ver as boas vindas:

http://localhost:8084/lojavirtual/mundo/boasVindas

Onde MundoController é seu controller e paises é seu método. Poderia mudar para lista(), fica melhor.

[]s

aix

Guevara:
Olá!
Vc deve chamar o método do Controller, então ficaria assim:

http://localhost:8084/lojavirtual/mundo/paises

Para ver as boas vindas:

http://localhost:8084/lojavirtual/mundo/boasVindas

Onde MundoController é seu controller e paises é seu método. Poderia mudar para lista(), fica melhor.

[]s

Ola Guevara, agradeço você estar ajudando, eu entendi esse lance ai de chamar o método do controller http://localhost:8084/lojavirtual/mundo/paises
mas esta me retornando erro 404, sabe o que mais poderia ser para os dados não estarem sendo carregados no JSP ? abraços.

Guevara

Se vc deixar aquele metodo com o nome de “paises” vc terá que ter uma jsp chamada paises.jsp dentro da pasta /WEB-INF/jsp, por isso, crie uma pagina lista.jsp e renomeie aquele metodo de “paises” para “lista”.
[]s

aix

Guevara:
Se vc deixar aquele metodo com o nome de “paises” vc terá que ter uma jsp chamada paises.jsp dentro da pasta /WEB-INF/jsp, por isso, crie uma pagina lista.jsp e renomeie aquele metodo de “paises” para “lista”.
[]s

blz manu, mas se eu renomear como vc diz vai ficar a mesma coisa, pois eu tenho uma jsp chamada paises dentro de /WEB-INF/jsp/mundo/paises.jsp
e minha source é assim: br.com.lojavirtual.Mundo.java

renomear o método fica a mesma coisa, o problema acredito ser outro.

Guevara

Não não, se vc renomear a sua jsp de paises para lista e o metodo tb vc vai chamar assim no browser:

http://localhost:8084/lojavirtual/mundo/lista

Deixe assim as suas jsp’s:

WEB-INF/jsp/lista.jsp
WEB-INF/jsp/boasVindas.jsp

Agora vai! o/

[]s

aix

Guevara:
Não não, se vc renomear a sua jsp de paises para lista e o metodo tb vc vai chamar assim no browser:

http://localhost:8084/lojavirtual/mundo/lista

Deixe assim as suas jsp’s:

WEB-INF/jsp/lista.jsp
WEB-INF/jsp/boasVindas.jsp

Agora vai! o/

[]s

velinho fiz exatamente conforme vc falou, mas continua erro 404, não sei se é porque uso netabeans, sei la, uma coisa que parece simples mas não funciona, vou deixar assim velho, vlw pela ajuda, com JSF eu faço e funciona na hora, abraços brigadão.

Guevara

=/
Têm que funcionar, a lógica é essa mesmo, o método que está no seu MundoController corresponde a uma jsp com o mesmo nome na pasta /WEB-INF/jsp, veja se o seu web.xml esta 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">
    <display-name>lojavirtual</display-name>

    <!--
        VRaptor will scan classpath for all @Component and 
        @Resource inside WEB-INF/classes

        If you want to load them also from WEB-INF/lib/ jars, 
        you need to specify from which packages they will
        be loaded, comma separated:
    -->
    
    <!-- 
    <context-param>
            <param-name>br.com.caelum.vraptor.packages</param-name>
            <param-value>br.com.caelum.vraptor.blank</param-value>
    </context-param>
     -->
     <context-param>  
     <param-name>br.com.caelum.vraptor.packages</param-name>      
     <param-value>br.com.caelum.vraptor.converter.l10n</param-value>  
     </context-param>    
     
     <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
    <param-value>pt_BR</param-value>
    </context-param>
     
     <context-param>  
    <param-name>br.com.caelum.vraptor.encoding</param-name>  
    <param-value>UTF-8</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>    
    
</web-app>

[]s

aix

Guevara:
=/
Têm que funcionar…

[/code]
[]s

manu, a unica coisa diferente são coisas que não estou usando no mometo como JSTL fmt, encode e converter e este parametro de contexto que é referente a pasta do projeto que eles ja deixam pronta la pro eclipse, mas eu uso Netbeans e isso não deveria ser nenhum problema pois é uma IDE que no meu ponto de vista 1000x melhor que o eclipse que até hack ja tive que usar para certas coisas, mas enfim ja estou irritado de não funcionar pra min e o pior que vejo que é um detalhe de nada, mas te agradeço de coração ter feito todas essas tentativas.

#    <context-param>  
#             <param-name>br.com.caelum.vraptor.packages</param-name>  
#             <param-value>br.com.caelum.vraptor.blank</param-value>  
#     </context-param>
Guevara

Feitas aquelas mudanças que eu sugeri, vc está chamando certo no browser?

http://localhost:8084/lojavirtual/mundo/boasVindas
http://localhost:8084/lojavirtual/mundo/lista

aix

Guevara:
Feitas aquelas mudanças que eu sugeri, vc está chamando certo no browser?

http://localhost:8084/lojavirtual/mundo/boasVindas
http://localhost:8084/lojavirtual/mundo/lista

sim exatamente como vc escreveu, antes de eu modificar para como vc falou, eu tinha assim /WEB-INF/jsp/mundo/boasVindas.jsp, agora tenho /WEB-INF/jsp/boasVindas.jsp, e se eu crio um método java comun(exemplo public void boasVindas():wink: em uma classe Mundo.java e chamo http://localhost:8084/lojavirtual/mundo/boasVindas ele imprime na console o system.out dele, o problema esta em ir para a view os dados.

Guevara

Beleza, então o caminho vc já consegue chamar corretamente, pq aquela pasta mundo (/WEB-INF/jsp/mundo) dentro da pasta jsp estava errado. Só falta vc mandar os dados pra sua lista.jsp ou paises.jsp e capturar com EL.

aix

Guevara:
Beleza, então o caminho vc já consegue chamar corretamente, pq aquela pasta mundo (/WEB-INF/jsp/mundo) dentro da pasta jsp estava errado. Só falta vc mandar os dados pra sua lista.jsp ou paises.jsp e capturar com EL.

brother como pode estar errado se é assim que esta no PDF da caelum ?

  1. Crie uma pasta chamada jsp dentro da pasta WEB-INF. Cuidado, o nome da pasta deve ser com letras
    minúsculas.
  2. Crie uma pasta chamada mundo dentro da pasta WEB-INF/jsp. Cuidado, o nome da pasta deve ser com letras
    minúsculas.
  3. Crie um jsp chamado boasVindas.jsp dentro da pasta WEB-INF/jsp/mundo. Seu projeto deve ficar assim:

pelo que li, os dados automaticamente estão disponiveis para a view, basta eu capturar com a EL através da convenção que é tipo de dados, se meu método retorna uma String fica ${string} se retorna uma lista ${tipoDaLista}List

G

Aix, realmente para quem vem do JSF a diferença é grande. Frameworks component-based são completamente diferente de action-based, em todos os sentidos possíveis. Por um lado o JSF 2 está um pouco mais próximo aos frameworks action-based, já que suporta finalmente os verbos HTTP.

Não sei que tu já trabalhaste com o JBoss Seam, mas ele por um lado é mais próximo ainda, já que ele por baixo dos planos tanto ele quanto o Vraptor controlam toda a infra do projeto.

A propósito, estou esperando uma resposta tua por email :D

Mas falando de Vraptor, ao contrário do JSF que da view você chama os métodos, no Vraptor a action que monta todos os objetos e a view apenas recebe eles. Ou seja, no JSF a view busca os objetos e no Vraptor os objetos já estão prontos.

Você precisa fazer algo assim:

@Resource
public class Mundo {
    private final Result result;

    public Mundo(Result result) {
        this.result = result;
    }

    public void boasVindas() {
        result.include("mensagem", "Ola Mundo!!!");

        List<String> paises = new ArrayList<String>();
        paises.add("Brasil");
        paises.add("Portugal");
        paises.add("Japão");
        paises.add("Canadá");
        paises.add("Paraguai");

        result.add("paises", paises);
    }
}

E no JSP

<body>
        O que vem do método:
        ${string}
        <p></p>
        os Paises:
        ${paises}
    </body>

Dê uma olhada na documentação no site do Vraptor. Tem bons exemplos lá, inclusive uma loja virtual que tu pode baixar e montar no eclipse para "fuçar".

aix

Ola garcia, eu não te respondi pois confesso que tenho que procurar, pois depois da mudança eu sei que havia colocado tudo em uma caixa, vou isso pra você hoje e depois te repondo por email.
quanto ao uso do vraptor cara, eu estou fazendo conforme manda o pdf e esta exatamente igual ao que você acaba de escrever, mas la no meu JSP que tem a EL não esta imprimindo nada, o resultado não esta na view, mas deixa pra la velho, não entendo como algo tão simples de fazer e para min não esta dando certo, abraços.

Guevara
3) Crie um jsp chamado boasVindas.jsp dentro da pasta WEB-INF/jsp/mundo. Seu projeto deve ficar assim:

Vc estava certo, eu viajei aqui, dentro da pasta mundo vc coloca as paginas jsp, o nome da jsp coincide com o nome do seu Controller, se é MundoController a pasta sera mundo tb, ficando /WEB-INF/jsp/mundo. Malz…=/

G

Aix, tu fez tudo do zero ou usou o blank project disponibilizado para download?

aix

eu fiz do zero, mas minha IDE é netbeans manu, la é só pra eclipse.

esta assim meu projeto:

view --> /WEB-INF/jsp/mundo/boasVindas.jsp e lista.jsp
source --> br.com.lojavirtual.Mundo.java

o conteudo das classes é identico ao pdf da caelum fj28, identico ao que postei no incio desse post.

respondendo ao irmão ai Guevara que estava tentando me ajudar, eu vi GUevara que precisava daquela pasta porem cheguei a fazer todos testes conforme vc mencionou mas não tive sucesso, não consigo fazer exibir os dados na view, é a coisa mais simples do mundo, mas pra min aqui não funciona.

aix

a url eu chamo assim:
http://localhost:8084/lojavirtual/mundo/boasVindas

ou http://localhost:8084/lojavirtual/jsp/mundo/boasVindas ? em ambas formas não exibe o resultado na view.

G

http://localhost:8084/lojavirtual/mundo/boasVindas

Você pode alterar isso usando a anotação @Path. Aí, pode exemplo, você pode alterar o endereço para algo como /oi

@Path("/oi") public void boasVindas() { [...] }

Nesse caso o URL seria algo como http://localhost:8084/lojavirtual/oi

aix

garcia-jj:
http://localhost:8084/lojavirtual/mundo/boasVindas

Você pode alterar isso usando a anotação @Path. Aí, pode exemplo, você pode alterar o endereço para algo como /oi

@Path("/oi") public void boasVindas() { [...] }

Nesse caso o URL seria algo como http://localhost:8084/lojavirtual/oi

pois é velho, não sei o que é, vou refazer tudo novamente, criar um projeto novo, pegar os jar do blank project, quem sabe assim pode dar certo, sei que é um erro besta.

HTTP Status 404 - /lojavirtual/WEB-INF/jsp/mundo/boasVindas.jsp

type Status report

message /lojavirtual/WEB-INF/jsp/mundo/boasVindas.jsp

description The requested resource (/lojavirtual/WEB-INF/jsp/mundo/boasVindas.jsp) is not available.
Apache Tomcat/6.0.26

Obrigado Garcia, até então, depois te respondo o email, abraços.

G

Vai lá, não desiste. Digo isso porque tu lembra bem minha revolta quando tive que usar o Seam. Logo tu te acha aí. Mas o melhor mesmo, para quem está começando em um mundo novo, é pegar um blank.

Lucas_Cavalcanti

HTTP Status 404 - /lojavirtual/WEB-INF/jsp/mundo/boasVindas.jsp

ou seja, ele não tá achando a jsp…

vc colocou ele em /WebContent/WEB-INF/jsp/mundo/boasVindas.jsp?

esse /WebContent é a pasta onde vc coloca os arquivos da web, não sei qual é o padrão q o netbeans gera.

G

O netbeans pode importar projetos do eclipse. creio que o blank-project do vraptor pode ser facilmente importado por ele. Alguém já usou?

aix

Garica tudo certo, fui la e baixe o blank-project deu tudo certo esta tudo funcionando perfeito, o erro foi eu tentar fazer na mão, alguma coisa com certeza eu errei ao confiigurar meu projeto, mas o mais interessante é que o blank-project foi feito no netbeans, não precisei fazer nada só abrir o projeto e programar, que massa.

Obrigado a todos, valeu Lucas, valeu Garcia e ao Guevara que tentou me ajudar, o framework é massa mesmo, muito simples programar com ele, estou louco pra colocar ele em produção, abraços.

Criado 16 de outubro de 2010
Ultima resposta 17 de out. de 2010
Respostas 24
Participantes 4