JSF - FacesMessage

Como faço para gerar uma mensagem de erro especifica para um componente via codigo no ManagedBean ?

No HTML:
<t:inputSecret id=“senha” value="#{OperadorMB.operador.senha}" size=“8” maxlength=“8” styleClass=“textField” required=“true” />
<t:message for=“senha” styleClass=“msgError”/>

No ManagedBean:
// Algum codigo de validação…
FacesMessage fm = new FacesMessage(“Senha inválida!”);
FacesContext.getCurrentInstance().addMessage(“senha”, fm);

Gostaria que alem da mensagem gerada pelo jsf de campo requerido, eu tambem pudesse imprimir uma outra mensagem de erro que seja gerada via codigo em um segundo estagio de validação e que seja colocada ao lado do componente.

Ola Demys

Você pode usar o proprio método addMessage do FacesContext, porém com mais parametros que você usou.

addMessage(field_id, new FacesMessage(FacesMessage.SEVERITY_ERROR, error message, error message));

Espero ter ajudado

vc deve fazer isso num validator,algo do tipo:


public class MyValidator implements Validator {

 public void validate(FacesContext facesContext, UIComponent uIComponent, Object object) throws ValidatorException {
     String objeto = (String)object
        if(1!=1){
            ((UIInput)uIComponent).setValid(false);
            FacesMessage message = new FacesMessage("Error message. ");   
            facesContext.addMessage(uIComponent.getClientId(facesContext),message);
        }
        
    }

}

declare o validator no faces-config e referencie na propriedade que quer usar.

No exemplo acima o field_id seria “senha” ?

Como faço para obter o field_id dentro do ManagedBean ?

field_id = propriedade ID do componente

exemplo:

h:inputText id=&quot;username&quot; value=&quot;#{login.username}&quot; /&gt;

o id = username

Tentei assim:

e gostaria de capturar assim:

mas so consigo capturar com:

[quote=demys]Tentei assim:

e gostaria de capturar assim:

mas so consigo capturar com:

Tenho esse mesmo problema…
Ninguem conhece nenhuma forma de recuperar algo do tipo:
#{facesContext.messages.???}

Obrigado.

use a propriedade forceId=“true” para que force o JSF a usar exatamente o nome que vc esta definindo no id.

por exemplo:

h:inputText id="username" forceId="true" value="#{login.username}" />

No seu caso você coloca o id do seu form:forDoComponenteDeMSG  ;D;

No seu caso você coloca o id do seu form:forDoComponenteDeMSG ;D;