Exibindo mensagens de requisições ajax
Autor: Cristiano Pires | Publicado: 2011-11-14T14:17:00-02:00

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 &lt;h:selectOneMenu&nbsp;

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&nbsp;&lt;h:selectOneMenu&nbsp;id="envioOperadora"&nbsp;value="#{consultaBean.terminal.idContrato.idOperadora}"&nbsp;&nbsp;
2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label="Operadora"&nbsp;converter="operadoraConverter"&nbsp;styleClass="envioOperadora"&nbsp;
3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;immediate="true"&nbsp;valueChangeListener="#{consultaBean.setOperadoraContrato}"&gt;
4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;f:selectItems&nbsp;value="#{terminalBean.listaOperadoras}"&nbsp;
5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var="op"&nbsp;itemLabel="#{op.descricao}"&nbsp;itemValue="#{op}"&nbsp;/&gt;
6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;f:ajax&nbsp;event="change"/&gt;&nbsp;
7&nbsp;&lt;/h:selectOneMenu&gt;


O campo onde o usuário informa a data da operação


1&nbsp;&lt;h:inputText&nbsp;value="#{consultaBean.dataEnvioContrato}"&nbsp;size="10"&nbsp;&nbsp;



2&nbsp;&nbsp;&nbsp;autocomplete="off"&nbsp;id="dataEnvio"&nbsp;styleClass="dataEnvio"&nbsp;label="Data&nbsp;do&nbsp;envio"



3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;converterMessage="A&nbsp;data&nbsp;do&nbsp;envio&nbsp;deve&nbsp;ser&nbsp;informada&nbsp;corretamente."&gt;



4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;f:convertDateTime&nbsp;pattern="dd/MM/yyyy"&nbsp;/&gt;



5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;f:ajax&nbsp;event="blur"&nbsp;listener="#{consultaBean.setDataContrato}"&nbsp;render=":messages"&nbsp;/&gt;



6&nbsp;&lt;/h:inputText&gt;


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&nbsp;&nbsp;public&nbsp;void&nbsp;setDataContrato(AjaxBehaviorEvent&nbsp;event)&nbsp;{



02&nbsp;&nbsp;&nbsp;FacesContext&nbsp;ctx&nbsp;=&nbsp;FacesContext.getCurrentInstance();



03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{



04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this.getIdOperadora()&nbsp;==&nbsp;null)&nbsp;{



05&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;DaoException(Messages.OPERADORA_INVALIDA.getValue());



06&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}



07&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(DaoException&nbsp;de)&nbsp;{





08 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctx.addMessage(null, new&nbsp;FacesMessage(FacesMessage.SEVERITY_INFO, de.getMessage(), de.getMessage()));



09 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }







10 &nbsp;&nbsp;&nbsp; }


Onde as mensagens serão exibidas


&lt;h:messages&nbsp;layout="table"&nbsp;showSummary="true"



&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showDetail="false"&nbsp;styleClass="msgErro"&nbsp;id="messages"&nbsp;



&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;infoClass="msgInfo"&nbsp;style="font-weight:&nbsp;bold"/&gt;


A classe DaoException, onde a exceção é gerada para exibir a mensagem


public&nbsp;class&nbsp;DaoException&nbsp;extends&nbsp;Exception&nbsp;{







&nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;long&nbsp;serialVersionUID&nbsp;=&nbsp;1L;



&nbsp;&nbsp;public&nbsp;DaoException(String&nbsp;cause)&nbsp;{



&nbsp;&nbsp;&nbsp;&nbsp;super(cause);



&nbsp;&nbsp;}





&nbsp;&nbsp;public&nbsp;DaoException()&nbsp;{&nbsp;super();&nbsp;}



&nbsp; 

}


Por último o enum de mensagens


01&nbsp;public&nbsp;enum&nbsp;Messages&nbsp;{



02&nbsp;&nbsp;&nbsp;



03&nbsp;&nbsp;&nbsp;OPERADORA_INVALIDA("Informe&nbsp;uma&nbsp;operadora&nbsp;válida.");



04&nbsp;&nbsp;&nbsp;



05&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;value;



06&nbsp;&nbsp;&nbsp;



07&nbsp;&nbsp;&nbsp;private&nbsp;Messages(String&nbsp;value)&nbsp;{



08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.value&nbsp;=&nbsp;value;



09&nbsp;&nbsp;&nbsp;}



10&nbsp;&nbsp;&nbsp;



11&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getValue()&nbsp;{



12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;value;



13&nbsp;&nbsp;&nbsp;}



14&nbsp;}