JSF - Campos obrigatórios em abas diferentes

Boa tarde pessoal,

Estou trabalhando em um projeto em JSF e estou com o seguinte problema:

Tenho uma tela com 2 abas (endereços e documentos)

Cada aba tem campos distintos e alguns são obrigatórios.

Problema 1:
Quando tento incluir um endereço, aparece a mensagem de erro criticando o preenchimento obrigatório de um campo da aba documentos.

Pergunta: Como faço para validar somente os campos da aba atual?

Problema 2:
Quando tento incluir um documento e não preencho algum campo obrigatório da própria aba documento, o sistema faz a crítica correta, mas muda para a aba endereços (que é a aba padrão).

Pergunta: Como faço para o sistema manter aberta a aba atual, que teve a crítica?

Desde já agradeço a atenção!

Posssivelmente exista uma forma melhor. Eu imaginei uma solução utilizando o process do seu botão para processar somente os campos que você deseja.

Você tem algum exemplo de utilização do “process”?

Desculpe a pergunta, é que eu sou iniciante em JSF e nunca utilizei esse “process”.

Me desculpe… você teria que utilizar um a4j:commandButton com um process especificando os IDs dos componentes que você quer que processe das fases de 2-5 do ciclo de vida JSF.

Se tem dois h:inputText na sua tela, com ids asdf e zxcv, dentro de process você especifica estes IDs separados por virgula.

Sua ação será por ajax, e não deve considerar os campos das demais abas, manja?

Deve existir alguma outra maneira, eu não tentei ainda.

Agora entendi!!!

Parece ser bem tranqüilo de implementar.

Vou testar e daqui a pouco posto se funcionou.

Valeu!

utiliza javascript

[quote=gr_marco]Me desculpe… você teria que utilizar um a4j:commandButton com um process especificando os IDs dos componentes que você quer que processe das fases de 2-5 do ciclo de vida JSF.

Se tem dois h:inputText na sua tela, com ids asdf e zxcv, dentro de process você especifica estes IDs separados por virgula.

Sua ação será por ajax, e não deve considerar os campos das demais abas, manja?

Deve existir alguma outra maneira, eu não tentei ainda.[/quote]

:?: Não funcionou! :?:

<h:inputText id="mandato_motivoEntrada" size="125" styleClass="inputText" value="#{condominioMB.mandato.motivoEntrada}" tabindex="104" required="true"/>

<h:inputText ...


<a4j:commandButton action="#{condominioMB.incluirMandato}" process="mandato_fim, mandato_motivoSaida, mandato_inicio, mandato_motivoEntrada, mandato_gestor, mandato_perfilGestor" value="Incluir Mandato" rendered="#{condominioMB.mandato.id == null}" styleClass="inputText" tabindex="108" title="Incluir Mandato"/>

Quando eu submeto aparece o erro abaixo de um campo que está em outra aba.

Será que estou fazendo alguma coisa errada?

coloca um ajaxSingle=true no seu commandButton… deve solucionar…
:thumbup:

[quote=gr_marco]coloca um ajaxSingle=true no seu commandButton… deve solucionar…
:thumbup: [/quote]

Funcionou em partes! hehehe :roll:

Realmente aconteceu como você disse, só foi feita a validação dos campos referentes àquela aba.

Porém, quando salvou no banco, praticamente todos os campos ficaram em branco.

Eu tenho que colocar algum comando específico dentro dos h:inputText, rich:calendar e h:selectOneMenu ?

E outra coisa, como eu expliquei acima, funcionou + ou - com o comando ajaxSingle=true, mas eu não entendi porque. Qual a função do ajaxSingle=true?

Valeu pela ajuda!

Você esta executando os ciclos de (decoding, conversion/validation, value applying) somente para os campos que mandou processar, o resto do formulário não.
Você deve elaborar a melhor forma de controlar seus formulários.
Se você não quer os outros campos em branco, deve deixar o required voltar a funcionar para a outra aba também. Esta é uma consequência por você querer processar uma aba de cada vez, tem que pensar nas saídas ou verificar se não era melhor trabalhar da maneira inicial.

Consegui resolver. Pelo menos eu acho que consegui. :smiley:

Eu retirei o ajaxSingle e o process do commandButton.

E coloquei todos os campos da aba dentro da taq a4j:region
Dessa forma, o ajax só valida os campos que estão dentro da tag region. Se estão preenchidos ele grava, se pelo menos um não está preenchido aparece a mensagem de erro.
:thumbup:

Agora eu estou com aquele mesmo problema do inicio:
Cadastrei os campos da aba 2, mas depois de fazer o cadastramento a página vai para a aba 1.
Eu estou tendo que clicar em cima da aba 2 para abri-la novamente.

E mais um probleminha, as informações que eu gravei na aba 2 não estão aparecendo na lista, para aparecerem estou tendo que fazer um refresh na página.

Vocês tem idéia de como faço para resolver esses 2 problemas? :?:

Estranho não estar aparecendo, tem certeza que os dados foram carregados no modelo?
Tenta um rerender. No seu commandButton, coloca o id da região que contém os campos da segunda aba.

Controlar que aba deve aparecer, você deverá controlar na mão. tem uma tag no richfaces para isto se não me engano. rich:componentControl da uma olhada na documentação do richfaces.