Exibindo mensagens de requisições ajax

Precisei disso em um formulário onde o usuário seleciona uma operadora de celular e em seguida informa uma data em que a requisição foi feita. O problema é que o usuário poderia esquecer de selecionar a operadora.

A operadora deveria ser selecionada a partir de um combo <h:selectOneMenu 

Nesse caso criei um evento do tipo blur, onde ao perder o foco do campo de data, verificaria se a operadora foi selecionada. Caso o usuário esqueça a mensagem é exibida.

O combo da operadora
1 <h:selectOneMenu id="envioOperadora" value="#{consultaBean.terminal.idContrato.idOperadora}"  
2     label="Operadora" converter="operadoraConverter" styleClass="envioOperadora" 
3     immediate="true" valueChangeListener="#{consultaBean.setOperadoraContrato}">
4     <f:selectItems value="#{terminalBean.listaOperadoras}" 
5       var="op" itemLabel="#{op.descricao}" itemValue="#{op}" />
6     <f:ajax event="change"/> 
7 </h:selectOneMenu>

O campo onde o usuário informa a data da operação
1 <h:inputText value="#{consultaBean.dataEnvioContrato}" size="10"  
2   autocomplete="off" id="dataEnvio" styleClass="dataEnvio" label="Data do envio"
3         converterMessage="A data do envio deve ser informada corretamente.">
4         <f:convertDateTime pattern="dd/MM/yyyy" />
5         <f:ajax event="blur" listener="#{consultaBean.setDataContrato}" render=":messages" />
6 </h:inputText>

Ao perder o foco, o evento verifica no bean se a operadora foi selecionada. Caso não tenha sido, será gerada uma exceção exibindo uma mensagem.
01  public void setDataContrato(AjaxBehaviorEvent event) {
02   FacesContext ctx = FacesContext.getCurrentInstance();
03       try {
04         if (this.getIdOperadora() == null) {
05           throw new DaoException(Messages.OPERADORA_INVALIDA.getValue());
06         }
07       catch (DaoException de) {
08       ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, de.getMessage(), de.getMessage()));
09       }
10     }

Onde as mensagens serão exibidas
<h:messages layout="table" showSummary="true"
              showDetail="false" styleClass="msgErro" id="messages" 
              infoClass="msgInfo" style="font-weight: bold"/>

A classe DaoException, onde a exceção é gerada para exibir a mensagem
public class DaoException extends Exception {

  private static final long serialVersionUID = 1L;

  public DaoException(String cause) {
    super(cause);
  }

  public DaoException() { super()}
 
}

Por último o enum de mensagens
01 public enum Messages {
02   
03   OPERADORA_INVALIDA("Informe uma operadora válida.");
04   
05   private String value;
06   
07   private Messages(String value) {
08     this.value = value;
09   }
10   
11   public String getValue() {
12     return value;
13   }
14 }

Comentários

Postagens mais visitadas deste blog

Utilizando um pool de conexões com hibernate

Popup em JSF sem Javascript

Gravando dados de um arquivo CSV no Oracle utlizando Python e a biblioteca cx_Oracle