Validação em JSF causando problemas

Boa tarde Pessoal!

Eu estou com um problema estranho faz um tempo já e não consegui resolver ainda… não entendi pq ocorre…

Minha estrutura é a seguinte:

Primeira tela:

. Lista os dados de uma tabela do meu BD
.Tem um link pra edição dos dados da linha selecionada do dataTable (vai pra página de Edição / Inserção)
.Tem um botão pra criar um novo registro (vai pra página de Edição / Inserção)

Segunda tela:

É a tela que eu uso pra inserir (caso na tela anterior tenha sido clicado o botão Novo) e pra editar um registro (caso tenha sido clicado o link editar referente a linha do dataTable)

.Tem um botão Salvar (que salva o objeto)
.Tem um botão cancelar (que simplesmente é um link pra retornar à página anterior)

Funciona assim (ou deveria…):

Quando é clicado o link editar, o objeto todo populado vai pra sessão e aparece todos os dados preenchidos na minha segunda tela para serem alterados… se o botão novo é clicado, um objeto com todos os campos vazios vai pra sessão e a minha segunda tela aparece com os campos vazios para um novo registro ser criado… sem usar validação nenhuma, tudo funciona perfeitamente… se eu clico no editar me vem todos os dados, eu altero e salvo… tudo OK… se clico em inserir tb… tudo funciona…

Agora eu coloquei umas validações (só required=“true”) e aí começou a dar problema… Se eu clico no botão novo, vou pra segunda tela pra criar um novo registro, não preencho algum dos campos requeridos e mando salvar ele me retorna a mesma tela com a mensagem…até aí tudo certo… agora se depois disso, em vez de preencher o campo requerido o qual deu a mensagem eu clicar no Cancelar pra voltar pra primeira tela, volta normalmente, mas a partir daí se eu clicar em editar (de qq linha do meu dataTable), a minha segunda tela aparece mas sem nenhum dado…

Meu managed bean está assim:

[code]private Clientes cliente = new Clientes();

         private DataModel clientes;

         private GerenciadorClientes gerenciadorClienteManaged;

         private String razao = null;

         

         

         public ClienteManaged(){}

// --------------------------------------------------------------------------

// --------------------------------------------------------------------------

         public String getRazao() {

                     return razao;

         }



         public void setRazao(String razao) {

                     this.razao = razao;

         }           

         

         public Clientes getCliente() {

                     return cliente;

         }



         public void setCliente(Clientes cliente) {

                     this.cliente = cliente;

         }



         public DataModel getClientes() {

                     ListDataModel ldm = new ListDataModel();

                     if (razao != null){ 

                                ldm.setWrappedData(gerenciadorClienteManaged.listaClientesPorRazao(razao));

                                //this.setRazao(null);

                     }else{

                     ldm.setWrappedData(gerenciadorClienteManaged.getClientes());

                     }

                     setClientes(ldm);

                     return clientes;

         }



         public void setClientes(DataModel clientes) {

                     this.clientes = clientes;

         }



         public GerenciadorClientes getGerenciadorClienteManaged() {

                     return gerenciadorClienteManaged;

         }



         public void setGerenciadorClienteManaged(

                                GerenciadorClientes gerenciadorClienteManaged) {

                     this.gerenciadorClienteManaged = gerenciadorClienteManaged;

         }

// --------------------------------------------------------------------------

// --------------------------------------------------------------------------

         public String salvarOuAlterarCliente(){

                     gerenciadorClienteManaged.salvarOuAlterarCliente(cliente);

                     clientes.setWrappedData(gerenciadorClienteManaged.getClientes());

                     this.setCliente(new Clientes());

                     return "sucessoSalvarAlterar";

         }

         



         public String editar() {

                        cliente = (Clientes) clientes.getRowData();

                     return "sucessoEditar";

             }

         

         public String novoCliente() {

                     this.setCliente(new Clientes());

                     return "sucessoNovo";

             }[/code]

Já criei um método cancelar() somente pra me retornar para a página anterior (com o immediate=“true”) e não deu certo tb…

Se eu não coloco as validações funciona como eu espero…

Alguém sabe aonde eu posso estar errando ?? Eu tentei ser o mais claro possível…

Já tentei colocar o meu botão cancelar em outro h:form mas não funcionou tb…

Meu scopo está como session…

Muito Obrigado

Douglas Grava[/code]

nos botões que não são necessários validação coloque o atributo immediate="true"

:joia:

Opa Marcos, tudo bem ?? (desculpe a demora…)

Então, eu já fiz isso que vc disse e não deu certo…
continua acontecendo a mesma coisa…

Deixa eu detalhar mais um pouco da aplicação e do que está acontecendo:

Qando é aberta a minha primeira tela eu listo os dados de uma tabela (clientes) num DataTable… nesse DataTable eu tenho um commandlink que vai pra uma página somente de visualização dos dados completos, um commandlink que vai pra uma outra página pra edição dos dados, e um commandlink pra apagar o dado referente a linha… fora do Datatable eu tenho um commandButton (inclusão) que chama a minha tela (a mesma do editar, somente eu instancio um novo bean cliente…) pra inclusão dos dados…

Quando eu clico no meu commandButton de inclusão a tela aparece com todos os campos em branco… se eu (por exempo) mandar salvar sem preencher nada volta pra mesma tela e é acusado o erro nos meus campos required=“true”… até aí perfeito… se logo depois disso eu resolvo cancelar, volta pra minha tela de listagem dos clientes e a partir daí que começa o problema… em qq linha que eu clique pra editar a referente linha, meus campos inputText aparecem em branco… na verdade (por estranho que pareça) alguns inputs aparecem preenchidos (do final do bean)…
parece que quando eu cancelo depois de de ter falhado a validação, ele mantem algum estado que não me mostra os valores do meu bean até certo ponto…

Mas na realidade os campos do bean só não estãos sendo mostrados nos imputs da minha tela de inclusão/alteração… pq se eu clico no commandlink pra mostrar a minha tela de visualização completa dos dados (só tem outputText) os dados são todos exibidos…

Eu uso um dataModel pra controlar minha dataTable…

Meu escopo é de sessão

Muito Obrigado

Douglas Grava