Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Ex. 6 aula 8 - não está aparecendo o nome na tela de lista quando está logado

Olá Estou com uma dúvida, não está aparecendo o nome na tela de lista quando está logado. Aparece simplesmente a frase "Lista de produtos do "

Segue fonte:

public class UsuarioLogado implements Serializable{

    @SessionScoped
    @Named
    private Usuario usuario;

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }


}

Página login/formulario.jsp

<body>
<div class="container">
 <form class="form-signin" action="<c:url value='/login/autentica'/>" method="post">
  <h2 class="form-signin-heading">Faça login para acessar o VRaptor-Produtos</h2>
  <input type="text" class="form-control" name="usuario.nome" placeholder="Nome"/>
  <input type="password" class="form-control" name="usuario.senha" placeholder="Senha"/>
  <button class="btn btn-lg btn-primary btn-block" type="submit">Login</button>
 </form>
<c:if test="${not empty errors}">
    <div class="alert alert-danger">
        <c:forEach items="${errors}" var="error">
            ${error.category} : ${error.message}<br />
        </c:forEach>
    </div>
</c:if>
</div>
</body>
</html>

e a produto/lista:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
    <link rel="stylesheet" type="text/css" href="../bootstrap/css/bootstrap.css">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Insert title here</title>
    </head>
    <body>
        <div class="container">
        <h1>Lista de produtos do ${usuarioLogado.usuario.nome}</h1>
        <table class="table table-stripped table-over table-bordered">
            <thead>
                <tr>
                    <th>Nome</th>
                    <th>Valor</th>
                    <th>Quantidade</th>
                </tr>
            </thead>
            <tbody>
                <c:forEach items="${listagem}" var="produto">
                    <tr>
                        <td>${produto.nome}</td>
                        <td>${produto.valor}</td>
                        <td>${produto.quantidade}</td>
                        <td>
                            <form action="/produto/remove">
                                <input type="hidden" name="produto.id" value="${produto.id}">
                                <button type="submit" name="_method" value="DELETE">Remover</button>
                            </form>
                        </td>
                        <td><a href="<c:url value='/produto/remove?produto.id=${produto.id}' />">Remover</a>
                        </td>
                    </tr>
                </c:forEach>
            </tbody>
        </table>
        </div>
        <c:if test="${not empty mensagem}">
            <div class="alert alert-success">${mensagem}</div>
        </c:if>
        <a href="<c:url value='/produto/formulario'/>"> adicione mais produtos</a></br>
        <a href="<c:url value='/produto/listaXML'  />"> veja listaXML </a>
</body>
</html>

apesar de passar pela tela de login com o usuario vraptor, ele n aparece nessa tela de listagem.

1 resposta
solução!

Já encontrei o erro: na classe UsuarioLogado eu tinha colocado as anotações depois de declarar a classe... e é antes. Estava:

public class UsuarioLogado implements Serializable{

    @SessionScoped
    @Named
    private Usuario usuario;

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }


}

e o correto é:

@SessionScoped
@Named
public class UsuarioLogado implements Serializable{


    private Usuario usuario;

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }


}