9
respostas

listaContas

Não estou conseguindo chamar a listaContas na URL. Recebo a seguinte mensagem:

HTTP Status 404 - /contas/WEB-INF/views/listaContas.jsp

type Status report

message /contas/WEB-INF/views/listaContas.jsp

description The requested resource is not available. Pivotal tc Runtime 3.2.0.RELEASE/8.5.4.B.RELEASE

lista.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!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>Insert title here</title>
</head>
<body>

    <table>
        <tr>
            <th>Código</th>
            <th>Descrição</th>
            <th>Valor</th>
            <th>Tipo</th>
            <th>Pago?</th>
            <th>Data de Pagamento</th>        
        </tr>

    <c:forEach items="${todasContas}" var="conta">
        <tr>
            <td>${conta.id}</td>
            <td>${conta.descricao}</td>
            <td>${conta.valor}</td>
            <td>${conta.tipo}</td>
            <td>
                <c:if test="S{conta.paga ea false}">
                Não paga.
                </c:if>
                <c:if test="S{conta.paga ea true}">
                Paga!
                </c:if>
            </td>
            <td><fmt:formatDate value="${conta.dataPagamento.time}" pattern="dd/MM/yyyy"/></td>    
        </tr>
    </c:forEach>

    </table>

</body>
</html>

contaController.java

package br.com.caelum.contas.controller;

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.portlet.ModelAndView;

import br.com.caelum.contas.dao.ContaDAO;
import br.com.caelum.contas.modelo.Conta;

@Controller
public class ContaController {

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

    @RequestMapping("/adicionaConta")
    public String adiciona(Conta conta) {

        System.out.println("Conta adicionada é: " + conta.getDescricao());
        ContaDAO dao = new ContaDAO();
        dao.adiciona(conta);

        return "conta-adicionada";

    }

    @RequestMapping("/listaContas")
    public ModelAndView lista() {

        ContaDAO dao = new ContaDAO();
        List<Conta> contas = dao.lista();

        ModelAndView mv = new ModelAndView("conta/lista");
        mv.addObject("todasContas", contas);
        return mv;
    }
}
9 respostas

Boa tarde Edrisan, usa url listaContas retorna para a jsp lista.jsp que está dentro da pasta conta. Você tem essa jsp? Seu xml do spring está com o prefix e sufix configurados?

O XML está com prefix e sufix conforme as orientações. Quando uso a url ele não está direcionando para \contas\lista.jsp´. Ele está indo para /contas/WEB-INF/views/listaContas.jsp que não existe. Não consegui resolver ainda.

A sua pasta chama conta ou contas? pois no seu controller está conta/lista. Faz assim, cola aqui o seu xml do spring por favor

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
                        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
                        http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/context 
                        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="br.com.caelum.contas" />
    <mvc:annotation-driven />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

Quando eu uso dessa forma, funciona. Com o retorno para "conta/lista". Mas, da outra forma não.

@RequestMapping("/listaContas")
    public String lista(Model mv) {
      ContaDAO dao = new ContaDAO();
      List<Conta> contas = dao.lista();

      mv.addAttribute("contas", contas);
      return "conta/lista";
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
                        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
                        http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/context 
                        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="br.com.caelum.contas" />
    <mvc:annotation-driven />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

Edrisan, Você importou a classe ModelAndView do pacote org.springframework.web.portlet sendo que o correto está no pacote org.springframework.web.servlet.

O Daniel está correto, eu também estava com o mesmo problema e notei que estava importando do pacote errado portlet

basta trocar:

import org.springframework.web.portlet.ModelAndView;

por

import org.springframework.web.servlet.ModelAndView;

kkk tive o mesmo problemas, fiquei algumas horas quebrando a cabeça pra tentar resolver e nada, quando vi a dica de vcs logo resolveu meu problema. Abs.

Tive o mesmo problema e resolvi com a dica de importação de pacote. Obrigada.