Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Dúvida no Ex. 1 da Aula 2 - Cadastro de produtos

Quando eu mapeio meu controller com /produtos/form ele não consegue encontrar a view.

Como foi mapeado o controller:

@Controller
public class ProdutosController {

    @RequestMapping("produtos/form")
    public String form() {        
        return "produtos\\form";
    }
}

O erro que retorna quando acesso a pagina:

type Status report

message /casadocodigo/produtos/WEB-INF/views/produtos/form.jsp

description The requested resource is not available.

Não sei porque no contexto ele esta retornando um /produtos/ entre o casadocodigo e WEB-INF.

No caso, acabei mapeando meu controller da seguinte forma para funcionar:

@Controller
public class ProdutosController {

    @RequestMapping("/form")
    public String form() {        
        return "produtos\\form";
    }
}

Como mapear utilizando o /produtos/form sem que aconteça este erro?

8 respostas

Se não me engano, a contra barra ("\") é usada só uma vez, já a barra normal, duas. No caso, ficaria assim:

@Controller public class ProdutosController {

@RequestMapping("//form") public String form() { return "produtos//form"; } } ou

@Controller public class ProdutosController {

@RequestMapping("\form") public String form() { return "produtos\form"; } }

Dá uma testada e volta um feedback! Quase certeza que é isso aí mesmo...

Danilo, mas não deu certo.

eu utilizo o '\\' no return porque estou utilizando uma maquina com windows e só assim para ele encontrar as views.

Também notei que quando mapeio a função com "produtos/form" ele tenta buscar a view no caminho:

 /casadocodigo/produtos/WEB-INF/views/produtos/form.jsp

sendo que o caminho correto seria:

 /casadocodigo/WEB-INF/views/produtos/form.jsp

O unico problema é que não sei resolver isso.

Hum... Tenta passar o caminho aboluto na hora de mapear. Ou seta ele como uma variável e fica usando só ela quando precisar (no caso, o caminho absoluto:

String abolutePath: /casadocodigo/WEB-INF/views/produtos/form.jsp

Danilo, procurei aqui como definir o absolutePath de uma view mas não achei nada. Poderia explicar melhor como fazer isso? Pois tentei muitas coisas e até agora nada. estou parado por causa disso.

Ah... Nessa linguagem aí eu não sei :( Mas faça alguns testes pra ver se ele consegue chegar no form.jsp de primeiro momento. Depois tenta um return com alguma coisa só pra você ter certeza que ele chegou lá. Se tiver chegado, o problema tá no seu return, se não, o problema tá no parâmetro que você passa no RequestMapping.

Quanto ao caminho absoluto, tente fazer assim:

String absolutePath = "blá-blá-blá"
@RequestMapping(absolutePath)
Blá-blá-blá 
return absolutePath;

Esse caminho absoluto é só o caminho que o programa vai percorrer pasta por pasta até chegar no seu arquivo. Eu uso com esse nome quando quero só a pasta, os arquivos que tem lá dentro depois eu me viro. No seu caso, tem que testar pra ver se vai funcionar tendo que jogar tudo até o "jsp" ou só até o nome do arquivo, sem extensão, ou mesmo até a pasta.

solução!

Consegui encontrar o erro, na minha classe AppWebConfiguration o InternalResourceViewResolver estava da seguinte forma:

@Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

Sendo o correto:

@Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

Só faltava uma "/" antes do WEB-INF no setPrefix.

Estava com o mesmo problema, essa dica aí resolveu mesmo:

 resolver.setPrefix("/WEB-INF/views/");

detalhe é que se nao me engano foi demonstrado dessa forma na aula 1.

CORRIGINDO: detalhe é que se nao me engano, *NÃO foi demonstrado dessa forma na aula 1.