Formularios no RichFaces tabPanel

Ola pessoa,

Estou usando o rich:tabPanel na minha aplicação. Cada aba eu uso para cadastrar uma entidade especifica do sistema. A primeira aba cadastra a entidade sem problemas, mas da segunda em diante a submissão dos dados não chega nos manegedbens correspondentes, ou seja, não sai nem do browser.
Dei uma olhada na documentação do rich:tabpanel, mas não encontrei nenhuma restrição ao uso de “forms”.

Alguem ja passou por isto?

Desde já obrigado!

Bom dia ricardo.tec!

Por favor, dê mais detalhe sobre essas rich:tabPanel, qual o tipo dela: ajax, server, client? Você tem um FORM para cada aba(Pelo menos foi o que entendi)?

Já tive problemas parecidos, resolvi colocando o swichType=“client”.

Uma dica coloque a tags no começo da sua página: (Somente no desenvolvimento, para achar bugs)

<h:messages globalOnly="false" />
<rich:messages globalOnly="false" />

Qualquer dúvida posta ai!

Abraços

… use apenas um form, para todas as abas

Uma coisa que você precisa cuidar é que a RichFaces tinha um bug em versões anteriores, onde se você renderizasse algo com ajax (um gridPanel, dataTable, etc.) os commandLink dentro do objeto que foi renderizado não funcionam.

Por exemplo, numa tela de consulta, onde você tem um campo para filtrar por nome e um a4j:commandButton que quando clicado chama a consulta do managedbean e usa uma tag reRender=“umDataTable”. Se houver algum commandLink dentro desse “umDataTable”, ele não ia funcionar depois de ser renderizado.

Um problema similar pode estar acontecendo no seu tabPanel que pelo que sei também usa ajax para renderizar cada tab.

Para resolver este problema, foi incluido a tag <a4j:form> que deve ser usada no lugar da <h:form>. Assim os commandLink passarão a funcionar normalmente.

http://www.jboss.org/file-access/default/members/jbossrichfaces/freezone/docs/devguide/en/html/a4j_form.html
http://livedemo.exadel.com/richfaces-demo/richfaces/form.jsf

De qualquer forma, coloque aqui o seu código para podermos ajudar melhor.

[quote]Uma coisa que você precisa cuidar é que a RichFaces tinha um bug em versões anteriores, onde se você renderizasse algo com ajax (um gridPanel, dataTable, etc.) os commandLink dentro do objeto que foi renderizado não funcionam.

Por exemplo, numa tela de consulta, onde você tem um campo para filtrar por nome e um a4j:commandButton que quando clicado chama a consulta do managedbean e usa uma tag reRender=“umDataTable”. Se houver algum commandLink dentro desse “umDataTable”, ele não ia funcionar depois de ser renderizado.

Um problema similar pode estar acontecendo no seu tabPanel que pelo que sei também usa ajax para renderizar cada tab.

Para resolver este problema, foi incluido a tag a4j:form que deve ser usada no lugar da <h:form>. Assim os commandLink passarão a funcionar normalmente.

http://www.jboss.org/file-access/default/members/j...devguide/en/html/a4j_form.html
http://livedemo.exadel.com/richfaces-demo/richfaces/form.jsf

De qualquer forma, coloque aqui o seu código para podermos ajudar melhor.[/quote]

pois é, mas em alguns casos, o a4j:form não ajuda, com as abas eu, particularmente, consegui fazer funcionar usando somente um form(h:form), justamente por problemas e submissao e de não rendereização de componentes na arvore do jsf, ocasionando null pointers a torto e a direito…

Coloca seu código aí para podermos analisar!

Como o TiagoW disse você deve usar a4j:form

Abraços

Pessoal,

Me desculpem, o problema estava entre o teclado e a cadeira. :slight_smile:
É que existia um erro de programação numa classe converter de um dos forms, onde um dos metodos getAsObject retornava String ao invés da classe pretendida.
Então quando corrigi os forms funcionaram perfeitamente.

Respondendo o markinho estou usando swichType=“client”.

Então obrigado a todos pela ajuda!

Seguinte moçada tenho um div que contem um tab panel e cada aba, embaixo tenho outro div com uns botões quero que de acordo com o div selecionado determinados botões fiquem visiveis ou não.

Tem como fazer?

obrigado

Amigos bom dia,

Eu estou com um problema parecido co o Tabpanel eu tenho vários tabs para um cadastro o problema é que o a4j:commandButton não executa o metodo de salvar do bean. segue abaixo o código.

Um coisa que observe foi que quando eu coloca somente uma tab ele grava perfeitamente, pessoal o que pode ser???


<%-- 
    Document   : cadastroAluno
    Created on : 23/04/2012, 22:40:47
    Author     : Gustavo
--%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>

<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



<html>
<head>
<title>Cadastro de Aluno</title>
<link rel="stylesheet" type="text/css" href="../css/estilo.css">
</head>
<f:view>
	<body>
		<h:form id="frm" styleClass="formulario" rendered="true">

			<h1>
				<h:outputText value="Cadastro de alunos" />
			</h1>

			<h:messages layout="table" showSummary="true" showDetail="false"
				globalOnly="true" styleClass="msgErro" infoClass="msgInfo"
				style="font-weight: bold" />

			<rich:tabPanel width="100%" >
				<rich:tab label="Dados Gerais" switchType="client" rendered="true">
					<h:panelGrid style="text-align: left" columns="2">
						<h:panelGroup style="text-align: left">
							<h:outputLabel value="Código: " />
							<h:inputText id="codigo" size="10"
								value="#{CadastroAlunoBean.alunoEdicao.cd_aluno}"
								label="Código do aluno" disabled="true" />
							<h:message for="codigo" showSummary="true" showDetail="false"
								styleClass="msgErro" />
							<br>
							<br>
							<h:outputLabel value="Nome: " />
							<h:inputText id="nomeAluno" size="80" maxlength="150"
								value="#{CadastroAlunoBean.alunoEdicao.nome}" required="true"
								label="Nome do Aluno" />
							<h:message for="nomeAluno" showSummary="true" showDetail="false"
								styleClass="msgErro" />
							<br>
							<br>
							<h:outputLabel value=" Data Nascimento: " />
							<rich:calendar id="dtNascimento" inputSize="12"
								datePattern="dd/MM/yyyy" enableManualInput="true"
								value="#{CadastroAlunoBean.alunoEdicao.dt_nascimento}"
								required="true" label="Data nascimento" />
							<h:message for="dtNascimento" showSummary="true"
								showDetail="false" styleClass="msgErro" />
							<br>
							<br>
							<h:outputLabel value="CPF/CNPJ: " />
							<h:inputText id="cnpjcpf" size="14" maxlength="14"
								value="#{CadastroAlunoBean.alunoEdicao.cnpj_cpf}"
								required="true" label="CPF/CNPJ">
							</h:inputText>
							<h:message for="cnpjcpf" showSummary="true" showDetail="false"
								styleClass="msgErro" />
							<br>
							<br>
							<h:outputLabel value="RG : " />
							<h:inputText id="rg" size="14" maxlength="14"
								value="#{CadastroAlunoBean.alunoEdicao.rg}" required="true"
								label="RG">
							</h:inputText>
							<h:message for="rg" showSummary="true" showDetail="false"
								styleClass="msgErro" />
							<br>
							<br>

							<h:outputLabel value="Orgão Emissor : " />
							<h:inputText id="OrgEmiss" size="14" maxlength="14"
								value="#{CadastroAlunoBean.alunoEdicao.rg_orgao}"
								required="true" label="Orgão Emissor">
							</h:inputText>
							<h:message for="OrgEmiss" showSummary="true" showDetail="false"
								styleClass="msgErro" />
							<br>
							<br>
							<h:outputLabel value="Nome do Pai : " />
							<h:inputText id="NomPai" size="80" maxlength="80"
								value="#{CadastroAlunoBean.alunoEdicao.filiacao_pai}"
								required="true" label="Nome do Pai">
							</h:inputText>
							<h:message for="NomPai" showSummary="true" showDetail="false"
								styleClass="msgErro" />
							<br>
							<br>
							<h:outputLabel value="Estado Civil : " />
							<h:selectOneMenu id="EstCivil"
								value="#{CadastroAlunoBean.alunoEdicao.estado_civil}"
								label="EstCivil" required="true">
								<f:selectItems value="#{CadastroAlunoBean.estados_civil}"
									var="e" itemLabel="#{e.descricao}" itemValue="#{e.codigo}" />
							</h:selectOneMenu>
							<h:message for="EstCivil" showSummary="true" showDetail="false"
								styleClass="msgErro" />
							<br>
							<br>
							<h:outputLabel value="Nome da Mãe : " />
							<h:inputText id="NomMae" size="80" maxlength="80"
								value="#{CadastroAlunoBean.alunoEdicao.filiacao_mae}"
								required="true" label="Nome da Mãe">
							</h:inputText>
							<h:message for="NomMae" showSummary="true" showDetail="false"
								styleClass="msgErro" />
							<br>
							<br>
							<h:outputLabel value="Status do aluno : " />
							<h:selectOneMenu id="StatusAlu"
								value="#{CadastroAlunoBean.alunoEdicao.cd_status }"
								label="StatusAlu" required="true">
								<f:selectItems value="#{CadastroAlunoBean.status_aluno}" var="s"
									itemLabel="#{s.descricao}" itemValue="#{s.cd_status}" />
							</h:selectOneMenu>
							<h:message for="StatusAlu" showSummary="true" showDetail="false"
								styleClass="msgErro" />
							<br>
							<br>
							<h:outputLabel value="Naturalidade : " />
							<h:inputText id="natural" size="14" maxlength="14"
								value="#{CadastroAlunoBean.alunoEdicao.naturalidade}"
								required="true" label="Naturalidade">
							</h:inputText>
							<br>
							<br>
							<h:outputLabel value="Nacionalidade : " />
							<h:inputText id="nacional" size="14" maxlength="14"
								value="#{CadastroAlunoBean.alunoEdicao.nacionalidade}"
								required="true" label="Nacionalidade">
							</h:inputText>
						</h:panelGroup>
					</h:panelGrid>
				</rich:tab>
				<rich:tab label="Endereço" switchType="client">
					<h:panelGrid style="text-align: left" columns="2">
						<h:panelGroup style="text-align: left">
							<h:outputLabel value="CEP : " />
							<h:inputText id="cep" size="14" maxlength="10"
								value="#{CadastroAlunoBean.alunoEdicao.cep}" required="true"
								label="Nacionalidade"
								validatorMessage="O valor informado não obedece ao padrão definido">
								<f:validateRegex pattern="(^[0-9]{2}\.?[0-9]{3}-{1}[0-9]{3})" />
							</h:inputText>
							<br>
							<br>
							<h:outputLabel value="Endereço : " />
							<h:inputText id="endereco" size="80" maxlength="200"
								value="#{CadastroAlunoBean.alunoEdicao.endereco}"
								required="true" label="Endereço">
							</h:inputText>
							<br>
							<br>
							<h:outputLabel value="Bairro : " />
							<h:inputText id="bairro" size="50" maxlength="60"
								value="#{CadastroAlunoBean.alunoEdicao.bairro}" required="true"
								label="Bairro">
							</h:inputText>
							<br>
							<br>
							<h:outputLabel value="Complemento : " />
							<h:inputText id="complemento" size="80" maxlength="200"
								value="#{CadastroAlunoBean.alunoEdicao.complemento}"
								required="true" label="Complemento">
							</h:inputText>
							<br>
							<br>
							<h:outputLabel value="Cidade : " />
							<h:inputText id="cidade" size="50" maxlength="60"
								value="#{CadastroAlunoBean.alunoEdicao.cidade}" required="true"
								label="Cidade">
							</h:inputText>
							<br>
							<br>
							<h:outputLabel value="Estado : " />
							<h:selectOneMenu id="Estado"
								value="#{CadastroAlunoBean.alunoEdicao.estado }"
								label="EstCivil" required="true">
								<f:selectItems value="#{CadastroAlunoBean.estado}" />
							</h:selectOneMenu>
							<h:message for="Estado" showSummary="true" showDetail="false"
								styleClass="msgErro" />
						</h:panelGroup>
					</h:panelGrid>
				</rich:tab>
				<rich:tab label="Endereço de Cobrança" switchType="client">
					<h:panelGrid style="text-align: left" columns="2">
						<h:panelGroup style="text-align: left">
							<h:outputLabel value="CEP : " />
							<h:inputText id="cep_cob" size="14" maxlength="14"
								value="#{CadastroAlunoBean.alunoEdicao.cob_cep }"
								required="true" label="CEP"
								validatorMessage="O valor informado não obedece ao padrão definido">
								<f:validateRegex pattern="(^[0-9]{2}\.?[0-9]{3}-{1}[0-9]{3})" />
							</h:inputText>
							<br>
							<br>
							<h:outputLabel value="Endereço : " />
							<h:inputText id="endereco_cob" size="80" maxlength="200"
								value="#{CadastroAlunoBean.alunoEdicao.cob_endereco}"
								required="true" label="Endereço">
							</h:inputText>
							<br>
							<br>
							<h:outputLabel value="Bairro : " />
							<h:inputText id="bairro_cob" size="50" maxlength="60"
								value="#{CadastroAlunoBean.alunoEdicao.cob_bairro}"
								required="true" label="Bairro">
							</h:inputText>
							<br>
							<br>
							<h:outputLabel value="Complemento : " />
							<h:inputText id="complemento_cob" size="80" maxlength="200"
								value="#{CadastroAlunoBean.alunoEdicao.cob_complemento}"
								required="true" label="Complemento">
							</h:inputText>
							<br>
							<br>
							<h:outputLabel value="Cidade : " />
							<h:inputText id="cidade_cob" size="50" maxlength="60"
								value="#{CadastroAlunoBean.alunoEdicao.cob_cidade}"
								required="true" label="Cidade">
							</h:inputText>
							<br>
							<br>
							<h:outputLabel value="Estado : " />
							<h:selectOneMenu id="Estado_cob"
								value="#{CadastroAlunoBean.alunoEdicao.cob_estado }"
								label="EstCivil" required="true">
								<f:selectItems value="#{CadastroAlunoBean.estado}" />
							</h:selectOneMenu>
							<h:message for="Estado" showSummary="true" showDetail="false"
								styleClass="msgErro" />
						</h:panelGroup>
					</h:panelGrid>
				</rich:tab>
				<rich:tab label="Contatos" switchType="client">
					<h:panelGrid style="text-align: left" columns="2">
						<h:panelGroup style="text-align: left">
							<h:outputLabel value="Telefone : " />
							<h:inputText id="telefone" size="14" maxlength="14"
								value="#{CadastroAlunoBean.alunoEdicao.telefone1}"
								required="true" label="Telefone">
							</h:inputText>
							<br>
							<br>
							<h:outputLabel value="Site : " />
							<h:inputText id="site" size="80" maxlength="100"
								value="#{CadastroAlunoBean.alunoEdicao.site}" required="true"
								label="Site">
							</h:inputText>
							<br>
							<br>

							<h:outputLabel value="Telefone : " />
							<h:inputText id="telefone2" size="14" maxlength="14"
								value="#{CadastroAlunoBean.alunoEdicao.telefone2}"
								required="true" label="Telefone">
							</h:inputText>
							<br>
							<br>

							<h:outputLabel value="Email : " />
							<h:inputText id="email" size="80" maxlength="100"
								value="#{CadastroAlunoBean.alunoEdicao.email}" required="true"
								label="Email">
							</h:inputText>
							<br>
							<br>

							<h:outputLabel value="Telefone : " />
							<h:inputText id="telefone3" size="14" maxlength="14"
								value="#{CadastroAlunoBean.alunoEdicao.telefone3}"
								required="true" label="Telefone">
							</h:inputText>

						</h:panelGroup>
					</h:panelGrid>
				</rich:tab>
				<rich:tab label="Cursos" switchType="client">
					<h:panelGrid style="text-align: left" columns="2">
						<h:panelGroup style="text-align: left">
							<h:outputLabel value="Data Desistência : " />
							<rich:calendar id="dtDesistencia" inputSize="12"
								datePattern="dd/MM/yyyy" enableManualInput="true"
								value="#{CadastroAlunoBean.alunoEdicao.dt_desistencia}"
								required="false" label="Data Desistência" />
							<h:message for="dtDesistencia" showSummary="true"
								showDetail="false" styleClass="msgErro" />
							<br>
							<br>
							<h:outputLabel value="Data Trancamento : " />
							<rich:calendar id="dtTrancamento" inputSize="12"
								datePattern="dd/MM/yyyy" enableManualInput="true"
								value="#{CadastroAlunoBean.alunoEdicao.dt_trancamento}"
								required="false" label="Data Trancamento" />
							<h:message for="dtTrancamento" showSummary="true"
								showDetail="false" styleClass="msgErro" />
							<br>
							<br>
							<h:outputLabel value="Data Conclusão Curso : " />
							<rich:calendar id="dtConclusaoCurso" inputSize="12"
								datePattern="dd/MM/yyyy" enableManualInput="true"
								value="#{CadastroAlunoBean.alunoEdicao.dt_conclusao_curso}"
								required="false" label="Data Conclusão Curso" />
							<h:message for="dtConclusaoCurso" showSummary="true"
								showDetail="false" styleClass="msgErro" />

						</h:panelGroup>
					</h:panelGrid>
				</rich:tab>
				<rich:tab label="Documentos" switchType="client">
					<h:panelGrid style="text-align: left-top" columns="4">

						<h:outputLabel value="Documento  : " />
						<h:selectOneMenu id="documento"
							value="#{CadastroAlunoBean.alunoEdicao.documentos }"
							label="documento" required="false">
							<f:selectItems value="#{CadastroAlunoBean.lsttipo_documento}" />
						</h:selectOneMenu>
						<br>
						<br>
						<rich:dataTable rows="10" id="tab"
							value="#{CadastroAlunoBean.alunoEdicao.documentos}" var="item"
							width="400px">
							<rich:column style="text-aling: center">
								<f:facet name="header">
									<h:outputText value="Documentos" />
								</f:facet>
								<h:outputText value="#{item.nome}" />
							</rich:column>
						</rich:dataTable>

					</h:panelGrid>
				</rich:tab>
				<rich:tab label="Observação" switchType="client">
					<h:panelGrid style="text-align: left-top" columns="2">
						<h:outputLabel value="Observação : " />
						<h:panelGroup style="text-align: left-top">
							<h:inputTextarea id="observacao"
								value="#{CadastroAlunoBean.alunoEdicao.observacao}"
								required="true" label="Observação" rows="10" cols="60">
							</h:inputTextarea>

						</h:panelGroup>
					</h:panelGrid>
				</rich:tab>

			</rich:tabPanel>

			<!------ Botões ----->


			<h:panelGroup>
				<a4j:commandButton value="Salvar"
					actionListener="#{CadastroAlunoBean.salvar}" reRender="frm"
					type="submit" />
				<a4j:commandButton value="Cancelar" action="menu" immediate="true" />
			</h:panelGroup>


		</h:form>
	</body>
</f:view>
</html>

Desde á agradeço a ajuda.