Struts 2 ActionError

3 respostas
danielti

Pessoal,

Bom dia.
Eu preciso de ajuda em resolvef a seguinte questão :

Estou usando struts 2 + spring + hibernate para desenvolver um artigo web.
Utilizei o tutorial em http://struts.apache.org/2.x/docs/struts-2-spring-2-jpa-ajax.html para me basear.

Bem o que preciso é enviar uma mensagem de erro apra a tag actionerror da pagina index.jsp:

<body>
        <s:form action="doLogin" method="POST" validate="true">
            <tr>
                <td colspan="2">
                    Login
                </td>
                
            </tr>
            
            <tr>
                <td colspan="2">
                    <s:actionerror />
                    <s:fielderror />
                </td>
            </tr>
            
            <s:textfield name="login" label="Login"/>
            <s:password name="senha" label="Senha"/>
            <s:submit value="Login" align="center"/>
            
        </s:form>
        
    </body>
Preciso fazê-lo sem pque a minha classe UsuarioAction que possui o método loga extenda ActionSupport, pois ela implementa o Preperable conforme o código abaixo:
import java.util.List;

import model.Usuario;
import service.UsuarioService;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.Preparable;


public class UsuarioAction implements Preparable  {
    private UsuarioService service;
    private List<Usuario> usuarios;
    private Usuario usuario;
    private Integer id;
    private String senha;
    private String login;

    public UsuarioAction(UsuarioService service) {
        this.service = service;
    }

    public String execute() {
        this.usuarios = service.findAll();
        return Action.SUCCESS;
    }

    public String save() {
        this.service.save(usuario);
        this.usuario = new Usuario();
        return execute();
    }

    public String remove() {
        service.remove(id);
        return execute();
    }

    public String loga () {
        if (service.loga(this.getLogin(),this.getSenha())) {
            return Action.SUCCESS;
        } else
        {  
            return Action.ERROR;
        }
    }

    public List<Usuario> getUsuarios() {
        return usuarios;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void prepare() throws Exception {
        if (id != null)
            usuario = service.find(id);
    }

    public Usuario getUsuario() {
        return usuario;
    }

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

    public String getSenha() {
        return senha;
    }

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

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }
}
O método loga é o seguinte:
public boolean loga(String login, String senha) {
        // System.err.println("Login :" + login + "  Senha : " + senha);
        Query query = getEntityManager().createQuery("select p FROM Usuario p where p.login = :login and p.senha = :senha");
        query.setParameter("login", login);
        query.setParameter("senha", senha);
        List<Usuario> usuario = query.getResultList();
        if (usuario.size() > 0) {
            Map session = ActionContext.getContext().getSession();
            session.put("logado","true");
            return true;
        } else {
            
            return false;
        }
    }
Meu struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.objectFactory" value="spring" />
    <constant name="struts.devMode" value="true" />

    <package name="usuario" extends="struts-default">

        <action name="list" method="execute" class="usuarioAction">
            <result>pages/list.jsp</result>
            <result name="input">pages/list.jsp</result>
        </action>

        <action name="remove" class="usuarioAction" method="remove">
            <result>pages/list.jsp</result>
            <result name="input">pages/list.jsp</result>
        </action>

        <action name="save" class="usuarioAction" method="save">
            <result>pages/list.jsp</result>
            <result name="input">pages/list.jsp</result>
        </action>
        

        <action name="doLogin" class="action.UsuarioAction" method="loga">
            <result name="input">index.jsp</result>
            <result name="error">index.jsp</result>
            <result>loginsuccess.jsp</result>
        </action>
        
    </package>
</struts>

Alguém pode me ajudar?

Muito obrigado,

3 Respostas

renatocustodio

Mas ela implementar preparable não quer dizer que não possa extender actionSupport!

Pode ser que tenha alguma interface que vc implemente para poder usar o addActionError sem extender, mas não sei de cabeça, tem que dar uma olhada na documentação.

danielti

Renato,

Muito obrigado pela dica.
É que ainda sou iniciante então algumas coisas são confusas para mim.

Bastou fazer o seguinte:

public class UsuarioAction extends ActionSupport implements Preparable  { ....

...}

Só alterei isso na declaração e funcionou.

Obrigado,

danielti

Ficou assim :

import java.util.List;

import model.Usuario;
import service.UsuarioService;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;



public class UsuarioAction extends ActionSupport implements Preparable  {

    private UsuarioService service;
    private List<Usuario> usuarios;
    private Usuario usuario;
    private Integer id;
    private String senha;
    private String login;

    public UsuarioAction(UsuarioService service) {
        this.service = service;
    }

    public String execute() {
        this.usuarios = service.findAll();
        return Action.SUCCESS;
    }

    public String save() {
        this.service.save(usuario);
        this.usuario = new Usuario();
        return execute();
    }

    public String remove() {
        service.remove(id);
        return execute();
    }

    public String loga() {
     
        

        if (service.loga(this.getLogin(), this.getSenha())) {
         
            return Action.SUCCESS;
        } else {
            addActionError("Usuário ou senha não encontrado, por favor tente novamente !");
            return Action.ERROR;
        }
    }

    public List<Usuario> getUsuarios() {
        return usuarios;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void prepare() throws Exception {
        if (id != null) {
            usuario = service.find(id);
        }
    }

    public Usuario getUsuario() {
        return usuario;
    }

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

    public String getSenha() {
        return senha;
    }

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

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }
}
Criado 7 de julho de 2008
Ultima resposta 7 de jul. de 2008
Respostas 3
Participantes 2