JSF - Campos obrigatórios em abas diferentes

11 respostas
R

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!

11 Respostas

G

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.

R

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

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

G

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.

R

Agora entendi!!!

Parece ser bem tranqüilo de implementar.

Vou testar e daqui a pouco posto se funcionou.

Valeu!

DiegoMau

utiliza javascript

R

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.

:?: 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?

G

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

R

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

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!

G

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.

R

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? :?:

G

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.

Criado 26 de janeiro de 2010
Ultima resposta 27 de jan. de 2010
Respostas 11
Participantes 3