Ae pessoal,
Já estou tentando a + de 3 dias e não consegui resolver:
No meu xhtml, quero cadastrar o usuario, este irá informar os dados basicos e a senha e outro campo para verificar a senha. Quando as senhas forem diferentes, o sistema deve mostrar uma mensagem avisando.
Ae que vem o problema… Quero mostrar a mensagem usando <p:message>, mas ela só aparece caso eu use <p:messages>
Já testei vários códigos que peguei na internet e em uma lista de e-mail, mas ainda nada. Segue o código que parece chegar mais perto do que preciso.
usuaarioAdd.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<ui:composition template="/WEB-INF/templates/default.xhtml">
<ui:define name="conteudo">
<f:view>
<h:form id="formUsuario">
<h:outputText value="#{msgs.titUsuNew}"/>
<br/>
<h:panelGrid columns="3" id="grid">
<h:outputLabel for="txtNome" value="#{msgs.lbUsuNome}"/>
<p:inputText id="txtNome" value="${usuarioMNG.nome}"/>
<p:message for="txtNome" showDetail="true"/>
<h:outputLabel for="cmbSetor" value="#{msgs.lbUsuSetor}"/>
<h:selectOneMenu id="cmbSetor" converter="setorConverter" value="#{usuarioMNG.setor}">
<f:selectItems value="#{setorMNG.listaSelectItem}" var ="vSetor" itemLabel="#{vSetor.nome}"/>
</h:selectOneMenu>
<p:message for="cmbSetor" showDetail="true"/>
<h:outputLabel for="cmbCargo" value="#{msgs.lbUsuCargo}"/>
<h:selectOneMenu id="cmbCargo" converter="cargoConverter" value="#{usuarioMNG.cargo}">
<f:selectItems value="#{cargoMNG.listaSelectItem}" var ="vCargo" itemLabel="#{vCargo.nome}"/>
</h:selectOneMenu>
<p:message for="cmbCargo" showDetail="true"/>
<h:outputLabel for="txtLogin" value="#{msgs.lbUsuLogin}"/>
<p:inputText id="txtLogin" value="${usuarioMNG.login}"/>
<p:message for="txtLogin" showDetail="true"/>
<h:outputLabel for="txtSenha" value="#{msgs.lbUsuSenha}"/>
<p:password id="txtSenha"
feedback="true" minLength="4"
promptLabel="Informe sua nova senha"
weakLabel="ruim"
goodLabel="boa"
strongLabel="ótima"
value="${usuarioMNG.senha}"/>
<p:message for="txtSenha" showDetail="true"/>
<h:outputLabel for="txtSenhaConfirma" value="#{msgs.lbUsuSenhaConfirma}"/>
<p:password id="txtSenhaConfirma"
feedback="false" minLength="4"
value ="${usuarioMNG.senhaConfirma}"
/>
<p:message for="txtSenhaConfirma"/>
<h:inputHidden id="validaUsuario" value="validaUsuario" validator="#{usuarioMNG.validateMsgs}" />
<p:message for="validaUsuario" showDetail="true"/>
</h:panelGrid>
<br/>
<h:commandButton
value="#{msgs.btClear}">
<f:ajax render="@form" listener="#{usuarioMNG.clear}"/>
</h:commandButton>
<p:commandButton
value="Salvar"
action="#{usuarioMNG.save}"
update="grid"/>
</h:form>
</f:view>
</ui:define>
</ui:composition>
</html>
[b]UsuarioMNG/b]
public String save(FacesContext context, UIComponent component, Object value) {
if (senha.equals(senhaConfirma)) {
Usuario usu = new Usuario();
usu.setLogin(this.login);
usu.setSenha(this.senha);
usu.setNome(this.nome);
usu.setEnviaMemo(enviaMemo);
usu.setSetor(this.setor);
usu.setCargo(this.cargo);
dao.create(usu);
return "ok";
} else {
System.out.println("Senha: " + senha);
System.out.println("Confi: " + senhaConfirma);
FacesContext context2 = FacesContext.getCurrentInstance();
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Senhas não conferem!", null);
context2.addMessage("formUsuario:validaUsuario", message);
/*
* funciona para <messageS>
* FacesContext.getCurrentInstance().addMessage("txtSenhaConfirma" new FacesMessage(FacesMessage.SEVERITY_INFO, "Senhas diferentes", null));
*/
// outro exemplo
// FacesMessage message = new FacesMessage("Senhas diferentes");
// FacesContext context = FacesContext.getCurrentInstance();
// context.addMessage(password.getClientId(context), message);
return "nao";
}
}
public void validateMsgs(FacesContext context, UIComponent component, Object value) {
if (context.getMaximumSeverity() != null) {
((UIInput) component).setValid(false);
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Campos marcados em vermelho são obrigatórios", null);
context.addMessage(component.getClientId(context), message);
}
}
Essa ultima mensagem aparece quando há campos com erro, e quando nenhum tem, fora o senhaCompara, a mensagem do senhaCompara não aparece.
Alguem tem uma idéia?