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
O campo onde o usuário informa a data da operação
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.
Onde as mensagens serão exibidas
A classe DaoException, onde a exceção é gerada para exibir a mensagem
Por último o enum de mensagens
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>
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