struts2 --&gt recuperando objeto da sessão

1 resposta
knik

Olá pessoal:
Estou tentando desenvolver um caso de uso “Efetuar Login”, utilizando o Struts2.
A idéia é, logo após submeter o formulário de login, o usuário (contendo nomeLogin e senha), é adicionado na sessão, via Interceptor --> para garantir.
A próxima página iria exibir o nomeLogin do usuário (é o que está pegando).

Alguém poderia emprestar seus conhecimentos e ajudar a desenvolver isto? o que iria contribuir muito para a comunidade GUJ, haja vista a enorme procura sobre material sobre struts2?

Criei as classes abaixo:

Usuario.java

package tutorial;

public class Usuario {
	
	private String nomeLogin;
	private String senha;
	
	public String getNomeLogin() {
		return nomeLogin;
	}
	public void setNomeLogin(String nomeLogin) {
		this.nomeLogin = nomeLogin;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	
}

AuthoriationInterceptor.java

package tutorial;

import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class AuthoriationInterceptor extends AbstractInterceptor {
	
	private static final long serialVersionUID = 1L;

	public String intercept(ActionInvocation ai) throws Exception {
	       
		Map session = ai.getInvocationContext().getSession();
	    Usuario usuario = (Usuario) session.get( "usuario" );
	    
	    if ( null != usuario) {
	    	Object o = ai.getAction();
	        if (o instanceof UsuarioAware) {
	        	UsuarioAware action = (UsuarioAware) o;
	            action.setUsuario(usuario);	            
	        }
	        return ai.invoke();
	    }else{
	        return Action.LOGIN;
	    }        
	}
	
}

AuthorizatedAccess.java

package tutorial;

import com.opensymphony.xwork2.ActionSupport;

public class AuthorizatedAccess extends ActionSupport implements UsuarioAware{

	private static final long serialVersionUID = 1L;
	private Usuario usuario;
	
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {		
		this .usuario = usuario;
	}
	
    public String execute() {
    	return SUCCESS;
    } 

}

UsuarioAware.java

package tutorial;

public interface UsuarioAware {
	void setUsuario(Usuario usuario);
}

Login.java

package tutorial;

import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;

public class Login extends ActionSupport implements SessionAware{
	
	private Usuario usuario;    
    private Map session;
    
	private static final long serialVersionUID = 1L;

	public Usuario getUsuario() {
		return usuario;
	}

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

	public Map getSession() {
		return session;
	}

	public void setSession(Map session) {		
		this .session = session;
	}
	
	@Override
    public String execute() {
        session.put("usuario",usuario);
        return SUCCESS;
    }    

}

Criei o 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>
    <include file ="struts-default.xml"/>    
    
    <package name ="default" extends ="struts-default">
		
		<interceptors>
            <interceptor name ="auth" class ="tutorial.AuthorizationInterceptor"/>
        </interceptors> 
              
        <action name ="Login" class ="tutorial.AuthorizatedAccess">
            <interceptor-ref name ="auth"/>
            <result name ="login">/Login.jsp</result>
            <result name ="success">/ShowUser.jsp</result>
        </action>
        
    </package>
    
</struts>

Alterei o web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_ID" 
         version="2.4" 
         xmlns="http://java.sun.com/xml/ns/j2ee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<display-name>AbstractInterceptor</display-name>
	
	<!-- configuração do struts-->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
        	org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>	
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

Criei a página Login.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib prefix="s" uri="/struts-tags"%>    
<!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=ISO-8859-1">
	<title>Insert title here</title>
</head>

<body>

<h1>  Login  </h1>
    Please select a role below:
    <s:form action ="Login">        
        <s:textfield key="nomeLogin" label="Usuário"></s:textfield>
		<s:password key="senha" label="Senha"></s:password>
    	<s:submit/>
    </s:form > 

</body>

</html>

Criei a página ShowUser.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib prefix="s" uri="/struts-tags"%>  
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<!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=ISO-8859-1">
	<title>Insert title here</title>
</head>

<body>

<%= session.getId() %>

	
</body>

</html>

Quando rodo o aplicativo --> tudo funciona beleza
O problema é que não estou conseguindo “pegar”, dentro da página ShowUser.jsp, os atributos nomeLogin e senha (parece que não consigo “ver” o objeto usuário que foi adicionado na sessão), mesmo utilizando <s:property value=“usuario.nomeLogin”/>, que deveria funcionar…

A galera menos experiente agradece.
Viva o GUJ.

1 Resposta

M

use isso !!!
<s:property value="#session[‘usuario’].id" />

Criado 1 de maio de 2007
Ultima resposta 14 de out. de 2008
Respostas 1
Participantes 2