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

Dúvida no Ex. 7 da Aula 5 - Injeção de dependências

Não entendi o porque do uso do "c:url" no action do formulário.

Quando envio os dados pelo formulário,

Recebo o seguinte erro:

type: Status report

message: /vraptor-produtos/login/%3Cc:url%20value=%27/login/loga%27%20/%3E

description: The requested resource is not available.

LoginController

package br.com.caelum.online.loja.controlador;

import br.com.caelum.online.loja.dominio.UsuarioLogado;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;

@Resource
public class LoginController {

    private final Result result;
    private final UsuarioLogado usuarioLogado;

    public LoginController(Result result, UsuarioLogado usuarioLogado) {
        this.result = result;
        this.usuarioLogado = usuarioLogado;
    }

    public void formulario() {

    }

    public void loga(String user, String pass) {
        if (user.equals("caelum") && pass.equals("vraptor")) {
            this.usuarioLogado.setLogin(user);
            result.redirectTo(ProdutoController.class).lista();
        } else {
            result.redirectTo(LoginController.class).formulario();
        }
    }
}

formulario.jsp

<html>
<body>

    <table>
        <form action="<c:url value='/login/loga' />" method="post">
            <tr>
                <td>Login</td>
                <td><input type="text" name="user" /></td>
            </tr>
            <tr>
                <td>Senha</td>
                <td><input type="password" name="pass" /></td>
            </tr>
            <tr>
                <td><input type="submit" value="Login" /></td>
            </tr>
        </form>
    </table>
</body>
</html>

UsuarioLogado

package br.com.caelum.online.loja.dominio;

import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;

@Component
@SessionScoped
public class UsuarioLogado {

    private String login;
    private String senha;

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }
}

Desde já agradecido!

5 respostas

Oi Calebe

Tenta colocar um @Post no método loga do LoginController.

Coloquei e apareceu um 404 quando autentico o usuário acessando a uri /login/formulario

HTTP Status 404 - /vraptor-produtos/login/%3Cc:url%20value='/login/loga'%20/%3E
solução!

Oi Calebe, percebe que o c:url não está sendo escapado:

%3Cc:url%20value='/login/loga'%20/%3E

Você está com a taglib c importada nesse seu JSP? Tem que ter:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

Muito obrigado Rodrigo, colocando a taglib o projeto funcionou. Eu não entendi direito o uso dessas tags, vou procurar algum conteúdo sobre. Achei superficial o conteúdo que é passado na explicação do curso. Valeu demais!

Legal, Calebe! Quando às taglibs, temos um curso específico sobre isso: https://www.alura.com.br/cursos-online-java-web#jstl. Grande abraço

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software