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>