bug#al-4269

Espec - Bolivariano - Restauração de senha.
dev:
qua:
master
valdir.cordeiro 2024-06-12 16:36:51 -03:00
parent 53871ac799
commit aaf0d4567a
12 changed files with 568 additions and 8 deletions

View File

@ -4,12 +4,12 @@
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.rjconsultores</groupId>
<artifactId>ventaboletosadm</artifactId>
<version>1.81.0</version>
<version>1.82.0</version>
<packaging>war</packaging>
<properties>
<modelWeb.version>1.61.0</modelWeb.version>
<flyway.version>1.46.0</flyway.version>
<modelWeb.version>1.62.0</modelWeb.version>
<flyway.version>1.47.0</flyway.version>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

View File

@ -12,6 +12,8 @@ import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.util.resource.Labels;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Execution;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
@ -98,7 +100,18 @@ public class IndexController extends MyGenericForwardComposer {
if (usuario == null) {
toolBarUser.setVisible(Boolean.FALSE);
Execution exec = Executions.getCurrent();
String param = exec.getParameter("param");
if(param != null) {
Map args = new HashMap();
args.put("login", param);
openWindow("/recuperarSenha.zul", "Recuperar Senha", args, MODAL, Boolean.FALSE);
} else {
openWindow("/login.zul", Labels.getLabel("winLogin.title"), arg, MODAL, Boolean.FALSE);
}
} else {
win.setCtrlKeys("^q");

View File

@ -0,0 +1,196 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.rjconsultores.ventaboletos.web.gui.controladores;
import java.util.Date;
import java.util.List;
import javax.mail.SendFailedException;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.util.resource.Labels;
import org.zkoss.zhtml.Messagebox;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Button;
import org.zkoss.zul.Textbox;
import com.rjconsultores.ventaboletos.entidad.Constante;
import com.rjconsultores.ventaboletos.entidad.RecuperarSenha;
import com.rjconsultores.ventaboletos.entidad.Usuario;
import com.rjconsultores.ventaboletos.service.ConstanteService;
import com.rjconsultores.ventaboletos.service.UsuarioService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.SendMail;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
@Controller("loginController")
@Scope("prototype")
public class LoginController extends MyGenericForwardComposer {
private static final long serialVersionUID = 1L;
private static final String HOST_SMTP_RECUPERACAOSENHA = "HOST_SMTP_RECUPERACAOSENHA";
private static final String PORTA_SMTP_RECUPERACAOSENHA = "PORTA_SMTP_RECUPERACAOSENHA";
private static final String USUARIO_SMTP_RECUPERACAOSENHA = "USUARIO_SMTP_RECUPERACAOSENHA";
private static final String SENHAUSUARIO_SMTP_RECUPERACAOSENHA = "SENHAUSUARIO_SMTP_RECUPERACAOSENHA";
private static final String URL_ADM = "URL_ADM";
private static Logger log = LogManager.getLogger(LoginController.class);
@Autowired
private UsuarioService usuarioService;
@Autowired
private ConstanteService constanteService;
private Button btnRecuperarSenha;
//login usuario, mantive o nome da tela para nao alterar o processo de login
private Textbox u;
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
}
public Button getBtnRecuperarSenha() {
return btnRecuperarSenha;
}
public void setBtnRecuperarSenha(Button btnRecuperarSenha) {
this.btnRecuperarSenha = btnRecuperarSenha;
}
public void onClick$btnRecuperarSenha(Event ev) {
try {
String login = u.getValue();
if (StringUtils.isBlank(login)) {
Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.camposVazios"),
Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION);
return;
}
List<Usuario> usuarioList = usuarioService.buscarPelaCveUsuario(login);
//Nao encontrado nenhum usuario com o login
if(usuarioList.isEmpty()) {
Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.loginNaoEncontrado"),
Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION);
return;
}
if(usuarioList.size() > 1) {
Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.multiplusUsuariosPorLogin"),
Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION);
return;
}
Usuario usuario = usuarioList.get(0);
if(StringUtils.isBlank(usuario.getDescCorreo())) {
Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.configuracaoConstante"),
Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION);
return;
}
Constante hostSmtp = constanteService.buscarPorNomeConstante(HOST_SMTP_RECUPERACAOSENHA);
Constante portaSmtp = constanteService.buscarPorNomeConstante(PORTA_SMTP_RECUPERACAOSENHA);
Constante usuarioSmtp = constanteService.buscarPorNomeConstante(USUARIO_SMTP_RECUPERACAOSENHA);
Constante senhaUsuarioSMTP = constanteService.buscarPorNomeConstante(SENHAUSUARIO_SMTP_RECUPERACAOSENHA);
Constante urlADM = constanteService.buscarPorNomeConstante(URL_ADM);
if(isNull(hostSmtp) || isNull(portaSmtp) || isNull(usuarioSmtp) || isNull(senhaUsuarioSMTP) || isNull(urlADM)) {
Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.emailNaoCadastrado"),
Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION);
return;
}
String URL = montarURL(login, urlADM, usuario);
enviarEmail(usuario, usuarioSmtp.getValorconstante(), hostSmtp.getValorconstante(), senhaUsuarioSMTP.getValorconstante(),
portaSmtp.getValorconstante(), URL);
Messagebox.show(Labels.getLabel("winCambiaContrasena.MSG.EmailRecuperacaoSenhaEnviado"),
Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION);
} catch (Exception ex) {
log.error(ex.getLocalizedMessage());
Clients.alert(ex.getLocalizedMessage(), Labels.getLabel("winCambiaContrasena.title"), Messagebox.INFORMATION);
}
}
private String montarURL(String login, Constante urlADM, Usuario usuario) {
String URL = urlADM.getValorconstante();
String dataAtual = DateUtil.getStringDate24Hour(new Date());
String paramEncode = login.concat(";").concat(dataAtual);
paramEncode = new String(Base64.encodeBase64(paramEncode.getBytes()));
URL = URL.concat("?param=").concat(paramEncode);
salvarParametro(paramEncode, usuario);
return URL;
}
private void salvarParametro(String paramEncode, Usuario usuario) {
RecuperarSenha recSenhaExiste = usuarioService.buscarLinkRecuperacaoSenhaPeloParam(paramEncode);
//Para evitar criar mais de um link no mesmo minuto
if(recSenhaExiste == null) {
RecuperarSenha recSenha = new RecuperarSenha();
recSenha.setParam(paramEncode);
recSenha.setActivo(Boolean.TRUE);
recSenha.setFecmodif(new Date());
recSenha.setUsuarioId(usuario.getUsuarioId());
usuarioService.salvarLinkRecuperacaoSenha(recSenha);
}
}
private boolean isNull(Constante valorConstante) {
return valorConstante == null || StringUtils.isBlank(valorConstante.getValorconstante());
}
private void enviarEmail(Usuario usuario, String usuarioSmtp, String smtpHost, String senhaSmtp, String portaSmtp, String urlADM) throws SendFailedException {
SendMail mail = new SendMail();
mail.setEmailTo(usuario.getDescCorreo());
mail.setEmailFrom(usuarioSmtp); // "cassiohcsilvadev@gmail.com"
mail.setSmtpHost(smtpHost); //"smtp.gmail.com"
mail.setSmtpPassword(senhaSmtp); // "jtzpzyzcjviyheym"
mail.setSmtpPort(portaSmtp); //"587"
mail.setSmtpUser(usuarioSmtp); //"cassiohcsilvadev@gmail.com"
mail.setAuth(true);
//URL: /ventaboletosadm/index.zul?param=USUARIO
String textoEmail = "RECUPERAÇÃO DE SENHA ADM. \n ";
textoEmail = textoEmail.concat("Link para recuperacao de senha: " + urlADM + " \n");
textoEmail = textoEmail.concat("O link tem validade de 5 minutos. ");
mail.setSubject("RECUPERAÇÃO DE SENHA ADM.");
mail.setText(textoEmail);
mail.send();
}
public Textbox getU() {
return u;
}
public void setU(Textbox u) {
this.u = u;
}
}

View File

@ -0,0 +1,167 @@
package com.rjconsultores.ventaboletos.web.gui.controladores;
import java.util.Date;
import java.util.List;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.util.resource.Labels;
import org.zkoss.zhtml.Messagebox;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Button;
import org.zkoss.zul.Textbox;
import com.rjconsultores.ventaboletos.entidad.RecuperarSenha;
import com.rjconsultores.ventaboletos.entidad.Usuario;
import com.rjconsultores.ventaboletos.service.UsuarioService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
@Controller("recuperarSenhaController")
@Scope("prototype")
public class RecuperarSenhaController extends MyGenericForwardComposer {
private static final long serialVersionUID = 1L;
private static Logger log = LogManager.getLogger(RecuperarSenhaController.class);
@Autowired
private UsuarioService usuarioService;
private Textbox txtUser;
private Textbox txtNewPassword;
private Textbox txtConfirmPassword;
private Button btnSalvar;
private Button btnFecharTela;
private RecuperarSenha recSenha;
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
String param = (String) Executions.getCurrent().getArg().get("login");
if(param != null) {
recSenha = usuarioService.buscarLinkRecuperacaoSenhaPeloParam(param);
//Se nao existe no banco nao ativa a troca de senha
if(recSenha == null) {
desativarCampos();
} else {
btnFecharTela.setVisible(false);
String paramDecode = new String(Base64.decodeBase64(param.getBytes()));
String[] parametros = paramDecode.split(";");
if(parametros.length != 2) {
desativarCampos();
} else {
if(isDataValida(parametros)) {
txtUser.setText(parametros[0]);
} else {
desativarCampos();
btnFecharTela.setLabel("Link expirado. Fechar tela.");
}
}
}
}
}
private void desativarCampos() {
txtUser.setDisabled(true);
txtNewPassword.setDisabled(true);
txtConfirmPassword.setDisabled(true);
btnSalvar.setVisible(false);
btnFecharTela.setVisible(true);
}
private boolean isDataValida(String[] parametros) {
Date dataParam =DateUtil.getDateString24Hour(parametros[1]);
Date dataAtual = new Date();
Long minutos = DateUtil.getElapsedMinutos(dataParam, dataAtual);
//A data e valida em ate 5 minutos
return minutos <= 5;
}
private void fecharTela() {
closeWindow();
openWindow("/login.zul", Labels.getLabel("indexController.app.nome"), arg, MODAL, Boolean.FALSE);
}
public void onClick$btnFecharTela(Event ev) {
fecharTela();
}
public void onClick$btnSalvar(Event ev) throws InterruptedException {
try {
if (StringUtils.isBlank(txtUser.getValue())) {
Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.camposVazios"),
Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION);
return;
}
List<Usuario> usuarioList = usuarioService.buscarPelaCveUsuario(txtUser.getValue());
//Nao encontrado nenhum usuario
if(usuarioList.isEmpty()) {
Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.camposVazios"),
Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION);
return;
}
if (!txtNewPassword.getValue().equals(txtConfirmPassword.getValue())) {
Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.senhasDiferentes"),
Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION);
return;
}
Usuario usuario = usuarioList.get(0);
usuarioService.cambiarContrasena(usuario, txtNewPassword.getValue());
//Desativar link
usuarioService.desativarLinkRecuperacaoSenha(recSenha);
Messagebox.show(Labels.getLabel("winCambiaContrasena.MSG.suscribirOK"),
Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION);
fecharTela();
} catch (Exception ex) {
log.error(ex.getLocalizedMessage());
Clients.alert(ex.getLocalizedMessage(), Labels.getLabel("winCambiaContrasena.title"), Messagebox.INFORMATION);
}
}
public Button getBtnSalvar() {
return btnSalvar;
}
public void setBtnSalvar(Button btnSalvar) {
this.btnSalvar = btnSalvar;
}
public Button getBtnFecharTela() {
return btnFecharTela;
}
public void setBtnFecharTela(Button btnFecharTela) {
this.btnFecharTela = btnFecharTela;
}
}

View File

@ -27,6 +27,7 @@ import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Label;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Radio;
@ -155,6 +156,10 @@ public class EditarUsuarioController extends MyGenericForwardComposer {
private boolean indConstanteIndMultiPuntoVenta;
private final String nombreIndConstanteIndMultiPuntoVenta ="IND_MULTI_PUNTOVENTA";
private Checkbox chkIndRecuperarSenha;
private Textbox txtMatricula;
private Datebox dataNascimento;
private Textbox txtSobrenomePaterno;
@Override
public void doAfterCompose(Component comp) throws Exception {
@ -592,6 +597,13 @@ public class EditarUsuarioController extends MyGenericForwardComposer {
usuario.setTipoVentaIntegracaoId(Long.valueOf(tipoVentaSeleccionado.getTipoventaId()));
}
if(chkIndRecuperarSenha.isChecked()) {
if(dataNascimento.getValue() == null || StringUtils.isBlank(txtMatricula.getValue()) || StringUtils.isBlank(txtSobrenomePaterno.getValue())) {
MensagensUtils.showMessageExclamation("editarUsuarioController.MSG.necessarioPreencherDadosRecuperacao", TITULO_CONTROLER);
return;
}
}
usuario.setIndRetornaTodasLocalidades( chkRetornaTodasLocalidades.isChecked());
usuario.setIndTrocaSenha(chkTrocarSenha.isChecked());
@ -976,4 +988,36 @@ public class EditarUsuarioController extends MyGenericForwardComposer {
public void setChkTrocarSenha(Checkbox chkTrocarSenha) {
this.chkTrocarSenha = chkTrocarSenha;
}
public Checkbox getChkIndRecuperarSenha() {
return chkIndRecuperarSenha;
}
public void setChkIndRecuperarSenha(Checkbox chkIndRecuperarSenha) {
this.chkIndRecuperarSenha = chkIndRecuperarSenha;
}
public Textbox getTxtMatricula() {
return txtMatricula;
}
public void setTxtMatricula(Textbox txtMatricula) {
this.txtMatricula = txtMatricula;
}
public Datebox getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(Datebox dataNascimento) {
this.dataNascimento = dataNascimento;
}
public Textbox getTxtSobrenomePaterno() {
return txtSobrenomePaterno;
}
public void setTxtSobrenomePaterno(Textbox txtSobrenomePaterno) {
this.txtSobrenomePaterno = txtSobrenomePaterno;
}
}

View File

@ -460,6 +460,7 @@
<value>com.rjconsultores.ventaboletos.entidad.Disponibilidad</value>
<value>com.rjconsultores.ventaboletos.entidad.EmpresaPMArtespConfig</value>
<value>com.rjconsultores.ventaboletos.entidad.EmpresaSicfeConfig</value>
<value>com.rjconsultores.ventaboletos.entidad.RecuperarSenha</value>
</list>
</property>

View File

@ -9988,3 +9988,16 @@ winMovimentacionBilhetesPuntoVenta.numSerie.label = Série
winMovimentacionBilhetesPuntoVenta.origem.label = Origen
winMovimentacionBilhetesPuntoVenta.puntoventa.label = Ag.
winMovimentacionBilhetesPuntoVenta.tipoMovimentacion.label = Naturaleza
editarUsuarioController.tabel.restaurarSenha= Restablecimiento de contraseña
editarUsuarioController.tabel.numeroMatricula= Registro
editarUsuarioController.tabel.dataNascimento= Fecha de nacimiento
editarUsuarioController.tabel.sobrenomePaterno= Apellido paterno
editarUsuarioController.MSG.necessarioPreencherDadosRecuperacao=Se deben completar todos los datos para utilizar la recuperación de contraseña.
winCambiaContrasena.erro.loginNaoEncontrado= No se encontró ningún usuario con el inicio de sesión proporcionado.
winCambiaContrasena.erro.multiplusUsuariosPorLogin= Se encontró más de un usuario con el mismo inicio de sesión, comuníquese con el administrador del sistema.
winCambiaContrasena.erro.emailNaoCadastrado= Correo electrónico del usuario no registrado, contacte al administrador del sistema.
winCambiaContrasena.MSG.EmailRecuperacaoSenhaEnviado=Se envió un enlace de recuperación de contraseña al correo electrónico registrado en el inicio de sesión del usuario.
winCambiaContrasena.erro.configuracaoConstante= Es necesario configurar constantes de envío de correo electrónico para la recuperación de contraseña. Póngase en contacto con el administrador de su sistema.
winCambiaContrasena.erro.linkInvalido=Enlace no válido.
winCambiaContrasena.btnLinkInvalidoFecharTela= Enlace no válido. Cerrar pantalla.

View File

@ -9961,3 +9961,17 @@ winMovimentacionBilhetesPuntoVenta.numSerie.label = Série
winMovimentacionBilhetesPuntoVenta.origem.label = Origine
winMovimentacionBilhetesPuntoVenta.puntoventa.label = Ag.
winMovimentacionBilhetesPuntoVenta.tipoMovimentacion.label = Nature
editarUsuarioController.tabel.restaurarSenha= Réinitialisation du mot de passe
editarUsuarioController.tabel.numeroMatricula= Inscription
editarUsuarioController.tabel.dataNascimento= Date de naissance
editarUsuarioController.tabel.sobrenomePaterno= Nom paternel
editarUsuarioController.MSG.necessarioPreencherDadosRecuperacao=Toutes les données doivent être renseignées pour utiliser la récupération de mot de passe.
winCambiaContrasena.erro.loginNaoEncontrado= Aucun utilisateur avec le login donné n'a été trouvé.
winCambiaContrasena.erro.multiplusUsuariosPorLogin= Plusieurs utilisateurs ont été trouvés avec le même identifiant, contactez votre administrateur système.
winCambiaContrasena.erro.emailNaoCadastrado= E-mail de l'utilisateur non enregistré, contactez l'administrateur système.
winCambiaContrasena.MSG.EmailRecuperacaoSenhaEnviado=Un lien de récupération de mot de passe a été envoyé à l'e-mail enregistré dans la connexion de l'utilisateur.
winCambiaContrasena.erro.configuracaoConstante= Il est nécessaire de configurer les constantes d'envoi d'e-mails pour la récupération du mot de passe. Contactez votre administrateur système.
winCambiaContrasena.erro.linkInvalido=Lien invalide.
winCambiaContrasena.btnLinkInvalidoFecharTela= Lien invalide. Fermez l'écran.

View File

@ -9966,3 +9966,16 @@ winMovimentacionBilhetesPuntoVenta.numSerie.label = Série
winMovimentacionBilhetesPuntoVenta.origem.label = Origem
winMovimentacionBilhetesPuntoVenta.puntoventa.label = Ag.
winMovimentacionBilhetesPuntoVenta.tipoMovimentacion.label = Natureza
editarUsuarioController.tabel.restaurarSenha= Restauração de Senha
editarUsuarioController.tabel.numeroMatricula= Matrícula
editarUsuarioController.tabel.dataNascimento= Data Nascimento
editarUsuarioController.tabel.sobrenomePaterno= Sobrenome Paterno
editarUsuarioController.MSG.necessarioPreencherDadosRecuperacao=Necessário preencher todos os dados para utilização da recuperação de senha.
winCambiaContrasena.erro.loginNaoEncontrado= Não foi encontrado nenhum usuário com o login informado.
winCambiaContrasena.erro.multiplusUsuariosPorLogin= Foi encontrado mais de um usuário com o mesmo login, contacte o administrador do sistema.
winCambiaContrasena.erro.emailNaoCadastrado= E-mail do usuário não cadastrado, contacte o adaministrado do sistema.
winCambiaContrasena.MSG.EmailRecuperacaoSenhaEnviado=Foi enviado um link de recuperação de senha para o e-mail cadastrado no login do usuário.
winCambiaContrasena.erro.configuracaoConstante= Necessário configurar constantes de envio de e-mail para a recuperação de senha. Contacte o administrador do sistema.
winCambiaContrasena.erro.linkInvalido=Link inválido.
winCambiaContrasena.btnLinkInvalidoFecharTela= Link Inválido. Fechar tela.

View File

@ -39,6 +39,7 @@
<tab id="tabUbicacion" label="${c:l('editarUsuarioController.tabel.ubicacion')}" />
<tab id="tabEmpresa" label="${c:l('editarUsuarioController.tabel.empresa')}" />
<tab id="tabInternet" label="${c:l('editarUsuarioController.tabel.internet')}" />
<tab id="tabRestaurarSenha" label="${c:l('editarUsuarioController.tabel.restaurarSenha')}" />
</tabs>
<tabpanels>
<tabpanel id="tbUsuario">
@ -259,6 +260,45 @@
</grid>
</tabpanel>
<tabpanel id="tbRestaurarSenha">
<grid fixedLayout="true">
<columns>
<column width="40%" />
<column width="60%" />
</columns>
<rows>
<row>
<label value="${c:l('editarUsuarioController.tabel.restaurarSenha')}" />
<checkbox id="chkIndRecuperarSenha" checked="@{winEditarUsuario$composer.usuario.indRecuperarSenha}" />
</row>
<row>
<label value="${c:l('editarUsuarioController.tabel.numeroMatricula')}" />
<textbox id="txtMatricula" maxlength="30"
value="@{winEditarUsuario$composer.usuario.matricula}"
use="com.rjconsultores.ventaboletos.web.utilerias.MyTextbox" />
</row>
<row>
<label value="${c:l('editarUsuarioController.tabel.dataNascimento')}" />
<datebox id="dataNascimento" width="120px" mold="rounded"
value="@{winEditarUsuario$composer.usuario.dataNascimento}" />
</row>
<row>
<label value="${c:l('editarUsuarioController.tabel.sobrenomePaterno')}" />
<textbox id="txtSobrenomePaterno" maxlength="30"
value="@{winEditarUsuario$composer.usuario.nombpaternoRecuperacao}"
use="com.rjconsultores.ventaboletos.web.utilerias.MyTextbox" />
</row>
</rows>
</grid>
</tabpanel>
</tabpanels>
</tabbox>

View File

@ -8,9 +8,9 @@
xmlns:h="http://www.w3.org/1999/xhtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:w="http://www.zkoss.org/2005/zk/client"
xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd">
xsi:schemaLocation="http://www.zkoss.org/2005/zul">
<window id="winLogin" title="${c:l('winLogin.title')}"
<window id="winLogin" title="${c:l('winLogin.title')}" apply="${loginController}"
border="normal" width="400px" closable="false" position="center"
mode="overlapped" onCreate="u.focus()">
@ -32,13 +32,15 @@
<hbox align="center">
<image src="/gui/img/pass24_4.png" />
<textbox id="p" type="password"
name="j_password" constraint="no empty" />
name="j_password" />
</hbox>
</row>
<row spans="2" align="center">
<hbox align="center">
<h:input type="button" name="btnAcessar"
value="${c:l('winLogin.btnAcessar')}" w:onClick="validate()" />
<button id="btnRecuperarSenha" label="Recuperar Senha" />
</hbox>
</row>
</rows>

View File

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<?page contentType="text/html;charset=UTF-8"?>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" arg0="winRecuperarSenha"?>
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c"?>
<zk xmlns="http://www.zkoss.org/2005/zul"
xmlns:h="http://www.w3.org/1999/xhtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:w="http://www.zkoss.org/2005/zk/client"
xsi:schemaLocation="http://www.zkoss.org/2005/zul">
<window id="winRecuperarSenha" title="${c:l('winCambiaContrasena.title')}" border="normal"
apply="${recuperarSenhaController}" width="410px" closable="false" position="center" mode="overlapped">
<grid>
<rows>
<row align="left">
<label value="${c:l('winCambiaContrasena.lblUsuario')}" />
<hbox align="center">
<image src="/gui/img/user24.png" />
<textbox id="txtUser" name="j_username"
use="com.rjconsultores.ventaboletos.web.utilerias.MyTextbox" />
</hbox>
</row>
<row align="left">
<label value="${c:l('winCambiaContrasena.lblNovaSenha')}" />
<hbox align="center">
<image src="/gui/img/pass24_4.png" />
<textbox id="txtNewPassword" type="password" name="j_password" constraint="no empty" />
</hbox>
</row>
<row align="left">
<label value="${c:l('winCambiaContrasena.lblConfirmaSenha')}" />
<hbox align="center">
<image src="/gui/img/pass24_4.png" />
<textbox id="txtConfirmPassword" type="password" name="j_password" constraint="no empty" />
</hbox>
</row>
<row spans="2" align="center">
<hbox align="center">
<button id="btnSalvar" height="18" image="/gui/img/save.png" width="90px"
tooltiptext="${c:l('winCambiaContrasena.btnAcessar')}" label="${c:l('winCambiaContrasena.btnAcessar')}"/>
<button id="btnFecharTela" height="18"
label="${c:l('winCambiaContrasena.btnLinkInvalidoFecharTela')}"/>
</hbox>
</row>
</rows>
</grid>
</window>
</zk>