Remover br.com.caelum.vraptor.blank.IndexController.index() do projeto [Resolvido]

Salve pessoal!

Fiz um projeto com o Vraptor e não sei onde eu removo essa inicialização do br.com.caelum.vraptor.blank.IndexController.index() e ao rodar no navegador http://localhost:8085/JMovie/formulario.jsp ou http://localhost:8085/JMovie/filme/formulario.jsp tô tomando erro 404.
Fiz o projeto conforme a apostila da Caelum, criei o formulario.jsp em /WEB-INF/jsp/filme/formulario.jsp.

A saida da inicialização é esta:

INFO: Starting Servlet Engine: Apache Tomcat/6.0.18
20:05:55,881  INFO [VRaptorApplicationContext] Refreshing Root WebApplicationContext: startup date [Mon Jan 18 20:05:55 BRST 2010]; root of context hierarchy
20:05:56,236  INFO [VRaptorApplicationContext] Scanning WEB-INF/classes: /home/bruno/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/JMovie/WEB-INF/classes
20:05:56,369  INFO [VRaptorApplicationContext] Scanning packages from WEB-INF/classes and jars: [br.com.bruno.JMovie]
20:05:56,392  INFO [DefaultListableBeanFactory] Overriding bean definition for bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor': replacing [Root bean: class [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] with [Root bean: class [br.com.caelum.vraptor.ioc.spring.InjectionBeanPostProcessor]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null]
20:05:56,743  INFO [DefaultListableBeanFactory] Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@3cc262: defining beans [defaultAcceptHeaderToFormat,emptyElementsRemoval,asmBasedTypeCreator,defaultMultipartConfig,noRoutesConfiguration,defaultInterceptorRegistry,defaultTypeNameExtractor,encodingHandlerFactory,defaultResourceNotFoundHandler,defaultTypeFinder,paranamerNameProvider,defaultRouter,pathAnnotationRoutesParser,objenesisProxifier,defaultResourceTranslator,defaultMethodNotAllowedHandler,defaultRoutes,defaultConverters,XStreamXMLDeserializer,defaultDeserializers,stereotypeHandler,converterHandler,interceptorStereotypeHandler,deserializesHandler,stereotypedBeansRegistrar,defaultSpringLocator,flashInterceptor,executeMethodInterceptor,interceptorListPriorToExecutionExtractor,defaultRefererResult,emptyResult,defaultFormatResolver,defaultPageResult,XStreamXMLSerialization,defaultValidationViewsFactory,parametersInstantiatorInterceptor,outjectResult,defaultPathResolver,defaultHttpResult,jstlLocalization,forwardToDefaultViewInterceptor,defaultRepresentationResult,deserializingInterceptor,resourceLookupInterceptor,defaultValidator,defaultLogicResult,defaultMethodInfo,applicationConfiguration,defaultResult,ognlParametersProvider,XStreamJSONSerialization,defaultStatus,defaultOutjector,instantiateInterceptor,multipartInterceptor,downloadInterceptor,bigDecimalConverter,bigIntegerConverter,booleanConverter,byteConverter,characterConverter,doubleConverter,enumConverter,floatConverter,integerConverter,localeBasedCalendarConverter,localeBasedDateConverter,longConverter,primitiveBooleanConverter,primitiveByteConverter,primitiveCharConverter,primitiveDoubleConverter,primitiveFloatConverter,primitiveIntConverter,primitiveLongConverter,primitiveShortConverter,shortConverter,uploadedFileConverter,VRaptorRequestProvider,httpServletRequestProvider,httpServletResponseProvider,httpSessionProvider,defaultInterceptorStack,defaultRequestExecution,indexController,filmeController,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.aop.config.internalAutoProxyCreator,cacheBasedTypeCreator]; root of factory hierarchy
20:05:56,909  INFO [DefaultConverters   ] Registering bundled converters
20:05:57,001  INFO [RouteBuilder        ] / --> public void br.com.caelum.vraptor.blank.IndexController.index()
20:05:57,014  INFO [RouteBuilder        ] /filme/adiciona --> public void br.com.bruno.jmovie.controller.FilmeController.adiciona(br.com.bruno.jmovie.model.Filme)
20:05:57,015  INFO [RouteBuilder        ] /filme/atualiza --> public void br.com.bruno.jmovie.controller.FilmeController.atualiza(br.com.bruno.jmovie.model.Filme)
20:05:57,015  INFO [RouteBuilder        ] /filme/lista --> public java.util.List br.com.bruno.jmovie.controller.FilmeController.lista()
20:05:57,017  INFO [VRaptor             ] VRaptor 3 successfuly initialized
18/01/2010 20:05:57 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8085
18/01/2010 20:05:57 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
18/01/2010 20:05:57 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/50  config=null
18/01/2010 20:05:57 org.apache.catalina.startup.Catalina start
INFO: Server startup in 2260 ms

Não deletei a source br.com.caelum.vraptor.blank.IndexController.index() e nem o jsp do index.jsp que vêm com o VRaptor pq não iria esclarecer a minha dúvida.

No meu web.xml deixei desta forma:

 <context-param>
        	<param-name>br.com.caelum.vraptor.packages</param-name>
	        <param-value>br.com.bruno.JMovie</param-value>
    </context-param>

Abraço!

Oi Guevara!

Continue um pouco mais os primeiros exemplos da apostila, la voce vai ver que voce nao vai acessar os .JSP, e sim as URLs amigaveis, de acordo com os nomes dos seus metodos.

Repare que seu JSP ta dentro do WEBINF por um motivo: ficar escondido e evitar que alguem acesse diretamente.

Obrigado pela ajuda Paulo!
Fiz algumas mudanças que deu certo, primeiro mudei o IndexController para a pasta Controller do meu projeto, depois deixei só com este conteúdo:

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

Coloquei o formulario.jsp em WebContent e agora ele aparece, já consigo incluir no banco, só que não esta listando.

O método na classe DAO e o da classe FilmeController está certo:

// Listando os filmes usando o metodo lista() da classe FilmeDAO		
		public List<Filme> lista() {
			return new FilmeDAO().lista();
		}		

No formulario.jsp estou chamando assim (eu coloquei a lista no mesmo jsp e esta redirecionando certo):

<c:forEach var="filme" items="${filmeList}">
    <tr>
        <td>${filme.id}</td>
        <td>${filme.nome }</td>
        <td>${filme.descricao }</td>
        <td>${filme.genero }</td>
		<td>${filme.duracao }</td>
		<td>${filme.ano }</td>
		<td>${filme.nota }</td>       
		<td><a href="/filme/remove?filme.id=${filme.id}">Excluir</a></td> 
        <td><a href="/filme/altera?filme.id=${filme.id}">Alterar</a></td>        
    </tr>
</c:forEach>

Valeu!

Oi Guevara!

E voce verificou se ele esta invocando o metodo lista com certeza? A query esta sendo executada? (ligue em debug e use o hibernate show_sql)

Veja tambem no log do vraptor se ele associou a url ao metodo corretamente

Oi Paulo!
Não há sinal de vida do List no console, consigo incluir o filme, mas não lista.

INFO: Server startup in 2424 ms
18:13:10,284 DEBUG [DefaultStaticContentHandler] deferring URI to container: /JMovie/formulario.jsp
18:13:29,600 DEBUG [DefaultResourceTranslator] trying to access /filme/adiciona
18:13:29,637 DEBUG [DefaultResourceTranslator] found resource {DefaultResourceMethod: br.com.bruno.jmovie.controller.FilmeController.adiciona}
18:13:29,828 DEBUG [JstlLocalization    ] couldn't find message bundle, creating an empty one
18:13:29,829 DEBUG [AsmBasedTypeCreator ] Trying to make class for FilmeController$adiciona$1276262570$1
18:13:29,850 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public void br.com.bruno.jmovie.controller.FilmeController.adiciona(br.com.bruno.jmovie.model.Filme) as [filme]
18:13:29,854 DEBUG [AsmBasedTypeCreator ] Parameter names found for creating type are: [Filme]
18:13:29,854 DEBUG [AsmBasedTypeCreator ] Method for field 'Filme' being defined for type Lbr/com/bruno/jmovie/model/Filme;
18:13:29,856 DEBUG [AsmBasedTypeCreator ] Methods: [public void FilmeController$adiciona$1276262570$1.setFilme(br.com.bruno.jmovie.model.Filme), public br.com.bruno.jmovie.model.Filme FilmeController$adiciona$1276262570$1.getFilme()]
18:13:29,857 DEBUG [AsmBasedTypeCreator ] Fields: [private br.com.bruno.jmovie.model.Filme FilmeController$adiciona$1276262570$1.Filme_]
18:13:29,857 DEBUG [CacheBasedTypeCreator] cached generic type for method {DefaultResourceMethod: br.com.bruno.jmovie.controller.FilmeController.adiciona}
18:13:29,873 DEBUG [OgnlParametersProvider] Applying filme.genero with [teste2]
18:13:29,925 DEBUG [OgnlParametersProvider] Applying filme.descricao with [teste2]
18:13:29,926 DEBUG [OgnlParametersProvider] Applying filme.nota with [10]
18:13:29,932 DEBUG [OgnlParametersProvider] Applying filme.duracao with [145]
18:13:29,940 DEBUG [OgnlParametersProvider] Applying filme.nome with [teste2]
18:13:29,941 DEBUG [OgnlParametersProvider] Applying filme.ano with [02/02/2003]
18:13:29,953 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public void br.com.bruno.jmovie.controller.FilmeController.adiciona(br.com.bruno.jmovie.model.Filme) as [filme]
18:13:29,954 DEBUG [ParametersInstantiatorInterceptor] Parameter values for {DefaultResourceMethod: br.com.bruno.jmovie.controller.FilmeController.adiciona} are [br.com.bruno.jmovie.model.Filme@979f67]
Hibernate: 
    select
        nextval ('hibernate_sequence')
Hibernate: 
    insert 
    into
        Filme
        (ano, descricao, duracao, genero, nome, nota, id) 
    values
        (?, ?, ?, ?, ?, ?, ?)
18:13:31,397 DEBUG [DefaultStaticContentHandler] deferring URI to container: /JMovie/formulario.jsp

Mostra claramente que acesso o formulário, incluo o filme, mas não detecta o método List.

FilmeController está assim:

// Listando os filmes usando o metodo lista() da classe FilmeDAO		
		public List<Filme> lista() {
			return new FilmeDAO().lista();
		}	

FilmeDAO:

@SuppressWarnings("unchecked")
	public List<Filme> lista() {
		return session.createCriteria(Filme.class).list();
	}

Listando os flimes numa tabela no formulario.jsp:

<c:forEach var="filme" items="${filmeList}">
    <tr>
        <td>${filme.id}</td>
        <td>${filme.nome }</td>
        <td>${filme.descricao }</td>
        <td>${filme.genero }</td>
		<td>${filme.duracao }</td>
		<td>${filme.ano }</td>
		<td>${filme.nota }</td>       
		<td><a href="/filme/remove?filme.id=${filme.id}">Excluir</a></td> 
        <td><a href="/filme/altera?filme.id=${filme.id}">Alterar</a></td>        
    </tr>
</c:forEach>

Não sei onde está o problema.

Valeu!

É o seguinte, fiz um teste criando uma pagina lista.jsp e colocando em /WEB-INF/jsp/filme/lista.jsp e coloquei o mesmo código que estava no formulario.jsp, fiz o redirecionamento para a lista.jsp desta forma:

// A acao adiciona
	public void adiciona(Filme filme) {
		new FilmeDAO().adiciona(filme);		
		result.use(Results.page()).redirect("/WEB-INF/jsp/filme/lista.jsp");
		//validator.onErrorUse(()).of(AnyController.class).anyMethod();
		//result.redirectTo("/WEB-INF/jsp/filme/formulario.jsp");
	}

E ao acessar o endereço http://localhost:8085/JMovie/filme/lista, eis o resultado:

Dentro do WEB-INF ele mostra a lista, mas dentro do meu formulario.jsp no WebContent não, é Bug isso ou funciona dessa forma mesmo?

Abraço!

então… o vraptor não chama outros metodos pra popular os atributos do jsp…

se vc quiser mostrar a lista no formulario.jsp, vc precisa adicionar (ou retornar) a lista no método formulário… ou redirecionar pro método lista, senão não mostra mesmo…

Obrigado Lucas e Paulo!
Resolvi aqui, ficou assim o código:

A classe FilmeController:

@Resource
public class FilmeController {

private Result result;
private FilmeDAO filmeDao;
	
	public void formulario() {
		result.include("filmList", lista());		
	}
	
	public FilmeController(Result result, FilmeDAO filmeDao) {
	    this.result = result;
	    this.filmeDao = filmeDao;
	}
	public List<Filme> lista() {
	    return filmeDao.lista();
	}
	public void adiciona(Filme filme) {
	    filmeDao.adiciona(filme);
	    //redirecionamento
	    result.use(Results.logic()).redirectTo(FilmeController.class).formulario();
	}
	public void remove(Filme filme) {
	    filmeDao.remove(filme);
	    //redirecionamento
	    result.use(Results.logic()).redirectTo(FilmeController.class).formulario();
	}
}

Meu formulario.jsp com inclusão e listagem de filmes no mesmo jsp:

<div id="header" align="center">
<form action="adiciona">	
	Nome: <input name="filme.nome"/>
	Descrição: <input name="filme.descricao"/>	
	Gênero: <input name="filme.genero"/><br/>
	Duração: <input name="filme.duracao"/>
	Ano: <input name="filme.ano"/>	
	Nota: <input name="filme.nota"/>
	<input type="submit" value="Enviar"/> 	
	<p align="center"><a href="efetuaLogout.do">Logout</a></p>	
</form><br/>
</div>	
<div id="wrapper" align="left">
    <table>
    <tr>
    <th width="50">Id</th>
    <th width="200">Nome</th>
    <th width="200">Descri&ccedil;&atilde;o</th>
    <th width="100">G&ecirc;nero</th>  
    <th width="100">Dura&ccedil;&atilde;o</th>
    <th width="80">Ano</th>
    <th width="40">Nota</th> 
    </tr>
    
    <!--<c:choose>
    <c:when test="${empty funcionario}">
    	<h3>Voce esta logado!</h3>
    </c:when>
    <c:otherwise>
    	<h3>Voce esta logado como usuario: ${funcionario.usuario} e senha: ${funcionario.senha}</h3>
    </c:otherwise>    
    </c:choose> -->
    
<c:forEach var="filme" items="${filmList}">
    <tr>
        <td>${filme.id}</td>
        <td>${filme.nome }</td>
        <td>${filme.descricao }</td>
        <td>${filme.genero }</td>
		<td>${filme.duracao }</td>
		<td>${filme.ano }</td>
		<td>${filme.nota }</td>       
		<td><a href="/JMovie/filme/remove?filme.id=${filme.id}">Excluir</a></td> 
		<td><a href="/JMovie/filme/altera?filme.id=${filme.id}">Alterar</a></td>       
    </tr>
</c:forEach>
    </table>
</div>

E alterei a classe FilmeDAO seguindo a nova versão da apostila da Caelum, lá têm dicas que não têm na minha apostila, o item 14.12 sobre Escopo de Componentes eu fiz aqui:

import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.bruno.jmovie.model.Filme;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.RequestScoped;

@Component
@RequestScoped
public class FilmeDAO {
	
private Session session;
	
	@SuppressWarnings("static-access")
	public FilmeDAO() {
		this.session = new HibernateUtil().openSession();
	}
	
	public void adiciona(Filme filme) {
		Transaction tx = session .beginTransaction();
		session.save(filme);
		tx.commit();
	}
	
	public void atualiza(Filme filme) {
		Transaction tx = session.beginTransaction();
		session.update(filme);
		tx.commit();
	}
	
	public void remove(Filme filme) {
		Transaction tx = session.beginTransaction();
		session.delete(filme);
		tx.commit();
	}
	
	@SuppressWarnings("unchecked")
	public List<Filme> lista() {
		return session.createCriteria(Filme.class).list();		
	}

}

Obrigado pela ajuda!

Encontro o mesmo problema nao lista :cry:

Segui passo a passo o tutorial da caelum mas nao fufa ja consigo inseri no banco mas quando tento visualisar os dados num lista.jsp nao aparece os dado do meu banco de dado

como está a sua lógica de listagem? como está seu lista.jsp? o lista jsp está na pasta WebContent/WEB-INF/jsp/ ?
o lista.jsp está com a taglib c incluída?

[]'s