Uma maneira elegante de controlar erros nos formulários construídos com IceFaces é criar uma classe no modelo, onde são criados atributos do tipo String que servirão para controlar a classe CSS utilizada para formatar o erro e a mensagem de erro que será mostrada.
No caso da entidade Person, supondo que apenas os atributos name e lastUpdated serão validados, a classe Erro poderia ser construída como segue:
01 package modelo; 02 03 public class Erro { 04 05 private String name; 06 private String lastUpdated; 07 08 public Erro() { 09 } 10 11 public String getLastUpdated() { 12 return lastUpdated; 13 } 14 15 public void setLastUpdated(String lastUpdated) { 16 this.lastUpdated = lastUpdated; 17 } 18 19 public String getName() { 20 return name; 21 } 22 23 public void setName(String name) { 24 this.name = name; 25 } 26 }
No controlador, esse modelo é utilizado para declarar dois novos objetos:
private Erro erros = new Erro(); private Erro classeErros = new Erro();
É necessário criar os getters e setters para os dois novos objetos. Em seguida, esses objetos serão utilizados ao validar uma instância da classe pessoa:
private boolean pessoaValida() { erros = new Erro(); classeErros = new Erro(); boolean naoOcorreuErro = true; if (pessoaSelecionada.getName().isEmpty()) { erros.setName("Nome é obrigatório."); classeErros.setName("classeErro"); naoOcorreuErro = false; } if (pessoaSelecionada.getLastupdated() == null) { erros.setLastUpdated("Data de atualização é obrigatória."); classeErros.setLastUpdated("classeErro"); naoOcorreuErro = false; } return naoOcorreuErro; }
Um exemplo de validação pode ser implementado no momento de gravar uma alteração:
public void atualizar() { if (pessoaValida()) { boolean gravou = dao.crud(pessoaSelecionada, "3"); abaSelecionada = 0; } }
Também é necessário um arquivo CSS com a classe de estilo do erro que sobrescreve, com a cláusula !important, os atributos CSS utilizados pelo componente panelGroup (pode ser criada uma pasta resources e um arquivo estilos.css, como sugestão) ...
.classeErro { background-color: #ff9933 !important; padding-right: 2px !important; padding-left: 2px !important; padding-bottom: 2px !important; padding-top: 2px !important; }
...será necessário referenciar o arquivo CSS criado (no meu caso, em pessoas.xhtml)...
<head>
<ice:outputstyle href="./xmlhttp/css/rime/rime.css" />
<ice:outputstyle href="/resources/estilos.css" />
</head>
...e modificar os componentes utilizados para a inserção dos dados:
<ice:outputtext value="Nome:" />
<ice:panelgroup styleclass="#{controlador.classeErros.name}">
<ice:panelgroup>
<ice:outputtext value="#{controlador.erros.name}" />
</ice:panelgroup>
<ice:inputtext value="#{controlador.pessoaSelecionada.name}" />
</ice:panelgroup>
<ice:outputText value="Atualizado em:" />
<ice:panelGroup styleClass="#{controlador.classeErros.lastUpdated}">
<ice:panelGroup>
<ice:outputText value="#{controlador.erros.lastUpdated}" />
</ice:panelGroup>
<ice:inputText value="#{controlador.pessoaSelecionada.lastupdated}" >
<f:convertDateTime pattern="dd/MM/yyyy" />
</ice:inputText>
</ice:panelGroup>
E o resultado final, ao ocorrer uma tentativa de gravação com algum dos campos requeridos em branco, ficará assim:Esta técnica para mostrar o campo que está impedindo a validação foi desenvolvida com base na técnica utilizada pelo gerenciador de conteúdos Plone, versão 2.5. Não é uma técnica elegante?
Nenhum comentário:
Postar um comentário