Struts 2 - Passando dados entre JSPs

2 respostas
F

Olá para todos,

Eu tenho uma tela de login, que eu gostaria que fosse redirecionada para uma outra tela onde o usuário irá completar alguns dados. Meu problema é que após o login, eu gostaria que o próximo JSP que o usuário vai preencher já aparecesse com o login preenchido, já que foi inserido no JSP anterior.

Tenho basicamente um LoginAction e um CadastrarUsuarioAction, ambos com os seus respectivos JSPs.

Pensei em colocar o login do usuario na sessão, e no método Preparable.prepare do cadastro seguinte setar a variavel da action correspondente, mas aparentemente prepare não é executado quando o JSP é chamado a partir de um result.

Alguma idéia que possa me ajudar? Muito obrigado a todos.

Aqui vai o código. As exceções e os logs ainda não estão sendo tratados adequadamente.

Meu struts.xml:

<struts>
    <include file="struts-default.xml"/>

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

        <action name="login" class="br.ufrj.dcc.mercurio.action.LoginAction" method="login">
            <result name="success">/usuarioLogado.jsp</result>
			<result name="input">/formCadastroUsuario.jsp</result>
			<result name="error">/loginNegado.jsp</result>
        </action>

        <action name="cadastrarUsuario" class="br.ufrj.dcc.mercurio.action.CadastrarUsuarioAction" method="cadastrar">
            <result name="success">/usuarioLogado.jsp</result>
			<result name="error">/loginNegado.jsp</result>
			<interceptor-ref name="paramsPrepareParamsStack"/>
        </action>
		
    </package>
</struts>

Meu Login Action:

public String login() throws Exception{

		Autenticador autenticador = new Autenticador();
		if (!autenticador.autentica(this.login, this.senha)) {
			return ERROR;
		}
		
		Context context = new InitialContext();
		GenericDAO genericDAO = (GenericDAO)context.lookup("GenericDAOImpl/local");

		Map<String, Object> session = ActionContext.getContext().getSession();
		
		//Verifica se o usuário autenticado já tem cadastro no sistema
		Usuario usuario = genericDAO.getUsuario(this.login);
		if (usuario == null) {
			System.out.println("::: Usuario não existente. Iniciando Cadastro.");
			session.put("logado", Boolean.FALSE);
			session.put("login", this.login);
			
			return INPUT;
		}
		
		session.put("logado",Boolean.TRUE);
		return SUCCESS;
		
	}

Meu Login JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<s:if test="hasErrors()">
	<b>Erros:</b>
	<s:fielderror />
</s:if>

<s:form action="login" method="post" id="formLogin" validate="false" theme="ajax">
	<span class="titulo">Login</span>

	<s:textfield name="login" label="login" size="20" />
	<s:password name="senha" label="senha" />
				
	<s:submit value="Login" targets="divPrincipal" />
		
</s:form>

Meu CadastrarUsuarioAction:

public class CadastrarUsuarioAction extends ActionSupport implements Preparable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 794145342393001230L;

	
	private Usuario usuario = new Usuario();
	
	
	
	public String cadastrar() throws Exception {
		
		Context context = new InitialContext();
		GenericDAO genericDAO = (GenericDAO)context.lookup("GenericDAOImpl/local");
	
		genericDAO.salvarUsuario(this.usuario);
		
		return SUCCESS;
	}
	
	@Override
	@SuppressWarnings("unchecked")
	public void prepare() throws Exception {
		Map<String, String> session = ActionContext.getContext().getSession();
		System.out.println("::: Session login [" + session.get("login") + "]");
		this.usuario.setLogin(session.get("login"));
	}
}

Meu CadastrarUsuario JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<s:if test="hasErrors()">
	<b>Erros:</b>
	<s:fielderror />
</s:if>

<span class="titulo">Cadastro de Usuario - Primeiro Login</span>


<s:form action="cadastrarUsuario" method="post" id="formCadastroUsuario" validate="true" theme="ajax">


	<s:textfield name="usuario.login" label="Login" disabled="true" size="20" />
	<s:textfield name="usuario.nome" label="Nome" size="20" />
	<s:textfield name="usuario.telefone1" label="Telefone" size="20" />
	<s:textfield name="usuario.celular" label="Celular" size="20" />
	<s:textfield name="usuario.endereco" label="Endereço" size="20" />
	<s:textfield name="usuario.email1" label="Email" size="20" />
				
	<s:submit value="Cadastrar" targets="divPrincipal" />
		
</s:form>

2 Respostas

Herrera

coloque a login na sessao e a capture na propria jsp para exibir. no site do struts2 tem alguns exemplos de como pegar dados da Session

Herrera

F

Herrera:
coloque a login na sessao e a capture na propria jsp para exibir. no site do struts2 tem alguns exemplos de como pegar dados da Session

Herrera

Muito obrigado. Eu achava que deveria ser feito de uma outra maneira ao invés de colocar parâmetros direto no JSP, mas funciona.

Obrigado novamente pela resposta.

Felipe

Criado 30 de março de 2008
Ultima resposta 1 de abr. de 2008
Respostas 2
Participantes 2