Estou estudando Richfaces e estou com alguns problemas, estou tentando fazer um simples CRUD, tenho um banco MySQL e estou usando Hibernate. Eu já consigo lista o conteúdo da tabela Empresa em uma dataTable, ai coloquei dois links nas linhas, um para excluir o registro e outro para alterar, a exclusão também está funcionando sem problemas, mas para a edição não está funcionando.
Quando eu clico em editar ele abre o conteúdo do registro em um popupPanel com um a4j:commandButton para salvar, o problema que ele não salva. Segue abaixo o meu codigo.
dataTable
<rich:dataTable value="#{empresaController.todasEmpresas}" var="empresa" iterationStatusVar="it" id="table" rows="15" rowClasses="odd-row, even-row" styleClass="stable">
<h:inputHidden value="#{empresa.idEmpresa}" />
<rich:column>
<f:facet name="header">#</f:facet>
#{it.index+1}
</rich:column>
<rich:column>
<f:facet name="header">Razão Social</f:facet>
<h:outputText value="#{empresa.razaoSocial}" />
</rich:column>
<rich:column>
<f:facet name="header">Fantasia</f:facet>
<h:outputText value="#{empresa.fantasia}" />
</rich:column>
<rich:column>
<f:facet name="header">CGC</f:facet>
<h:outputText value="#{empresa.cgc}" />
</rich:column>
<rich:column>
<f:facet name="header">Status</f:facet>
<h:outputText value="#{empresa.status}" />
</rich:column>
<rich:column>
<f:facet name="header">Tipo de Empresa</f:facet>
<h:outputText value="#{empresa.tipoEmpresa}" />
</rich:column>
<rich:column>
<f:facet name="header">Ações</f:facet>
<a4j:commandLink styleClass="no-decor" execute="@this" render="@none"
oncomplete="#{rich:component('confirmPane')}.show()">
<h:graphicImage value="/images/icons/delete.gif" alt="delete" />
<a4j:param value="#{empresa.idEmpresa}" assignTo="#{empresaController.currentEmpresaIndex}" />
</a4j:commandLink>
<a4j:commandLink styleClass="no-decor" render="editGrid" execute="@this" oncomplete="#{rich:component('editPane')}.show()">
<h:graphicImage value="/images/icons/edit.gif" alt="edit" />
<a4j:param value="#{empresa.idEmpresa}" assignTo="#{empresaController.currentEmpresaIndex}" />
<f:setPropertyActionListener target="#{empresaController.empresaSelecionada}" value="#{empresa}" />
</a4j:commandLink>
</rich:column>
<f:facet name="footer">
<rich:dataScroller page="#{empresaController.page}" />
</f:facet>
</rich:dataTable>
popupPanel
<rich:popupPanel header="Alterar Empresa" id="editPane" autosized="true" width="400" height="200">
<h:panelGrid columns="3" id="editGrid">
<h:inputHidden value="#{empresaController.empresaSelecionada.idEmpresa}" />
<h:outputText value="Razao Social" style="font-size: 11px; font-weight: bold" />
<h:inputText value="#{empresaController.empresaSelecionada.razaoSocial}" required="true" requiredMessage="Campo Obrigatorio" label="Deve ser informado a Razão Social da Empresa"/>
<h:panelGroup />
<h:outputText value="Fantasia" style="font-size: 11px; font-weight: bold" />
<h:inputText value="#{empresaController.empresaSelecionada.fantasia}" required="true" requiredMessage="Campo Obrigatorio" label="Deve ser informado o nome fantasia da Empresa"/>
<h:panelGroup />
<h:outputText value="CGC" style="font-size: 11px; font-weight: bold" />
<h:inputText value="#{empresaController.empresaSelecionada.cgc}" required="true" requiredMessage="Campo Obrigatorio" label="Deve ser informado o CGC da Empresa" />
<rich:message id="priceMsg" for="price" />
<h:outputText value="Status" style="font-size: 11px; font-weight: bold" />
<h:selectOneListbox value="#{empresaController.empresaSelecionada.status}" size="1">
<f:selectItems value="#{empresaController.listaStatus}" />
</h:selectOneListbox>
<h:panelGroup />
<h:outputText value="Tipo de Empresa" style="font-size: 11px; font-weight: bold" />
<h:selectOneListbox value="#{empresaController.empresaSelecionada.tipoEmpresa}" size="1">
<f:selectItems value="#{empresaController.tiposEmpresa}" />
</h:selectOneListbox>
</h:panelGrid>
<h:panelGroup />
<a4j:commandButton value="Salvar" action="#{empresaController.alterar}" render="table" execute="editPane"
oncomplete="if (#{facesContext.maximumSeverity==null}) {#{rich:component('editPane')}.hide();}" />
<a4j:commandButton value="Cancelar" onclick="#{rich:component('editPane')}.hide(); return false;" />
</rich:popupPanel>
ManagedBean
[code]
@Named(value = “empresaController”)
@ManagedBean
@SessionScoped
public class EmpresaController implements Serializable {
/**
* Creates a new instance of EmpresaController
*/
private static final int CLIENT_ROWS_IN_AJAX_MODE = 15;
private Empresa e;
private Empresa empresaSelecionada;
private DaoEmpresa dao;
private DataModel listaEmpresa;
private List<Empresa> todasEmpresas;
private List<SelectItem> tiposEmpresa;
private List<SelectItem> listaStatus;
private int page = 1;
private int currentEmpresaIndex;
private int clientRows;
..............................
public List<Empresa> getTodasEmpresas() {
dao = new DaoEmpresa();
todasEmpresas = dao.listarTodos();
System.out.println("Listando empresas ...............................................................................");
return todasEmpresas;
}
public void remove() {
dao = new DaoEmpresa();
dao.deletar(currentEmpresaIndex);
}
public void salvar() {
dao = new DaoEmpresa();
dao.salvar(e);
}
public void alterar() {
System.out.println("Alterando .........................................................................................");
dao = new DaoEmpresa();
dao.alterar(empresaSelecionada);
}
//gets e sets
}[/code]
Eu coloquei ate uns prints nos métodos e a impressão é que ele nem chega a entrar no método alterar.
Alguém pode me dar uma ajuda?
Só pra eu entender corretamente, a popup de edição abre normalmente, mas quando você clica no botão de alterar o seu método do bean não é invocado, correto ?
Alguma exceção é lançada no console do seu servidor ?
É exatamente isso, a tela de edição carrega normalmente, mas quando salvo o metodo de alterar não é invocado. Nenhuma exceção.
seu popup está dentro de um <h:form> ?
Um teste que eu costumo fazer nesses casos é remover o ajax pra ver se o problema está em outro lugar, subsituo meu a4j:commandButton por um <h:commandButton> e vou encontrando o erro por eliminação.
Eu tirei o ajax e o resultado foi o mesmo, tem mais alguma dica?
Pessoal bom dia,
Estou com este mesmo problema, gostaria de saber se vocês conseguiram resolver, isso já esta me deixando doido estou a 2 dias parado !!
Desde já agradeço a ajuda de vocês e a atenção.
Eu resolvi sim o problema, na verdade eu voltei a usar o ajax e no popupPanel eu não tinha colocado o atributo domElementAttachment=“parent”. ai funcionou sem problemas.
Veja como ficou:
<rich:popupPanel header="Nova Empresa" id="savePane" domElementAttachment="parent" width="400" height="200">
<h:panelGrid columns="3" id="saveGrid">
<h:outputText value="Razao Social" style="font-size: 11px; font-weight: bold" />
<h:inputText value="#{empresaController.e.razaoSocial}" required="true" requiredMessage="Campo Obrigatorio" label="Deve ser informado a Razão Social da Empresa"/>
<h:panelGroup />
<h:outputText value="Fantasia" style="font-size: 11px; font-weight: bold" />
<h:inputText value="#{empresaController.e.fantasia}" required="true" requiredMessage="Campo Obrigatorio" label="Deve ser informado o nome fantasia da Empresa"/>
<h:panelGroup />
<h:outputText value="CGC" style="font-size: 11px; font-weight: bold" />
<h:inputText value="#{empresaController.e.cgc}" required="true" requiredMessage="Campo Obrigatorio" label="Deve ser informado o CGC da Empresa" />
<rich:message id="priceMsg2" for="price" />
<h:outputText value="Status" style="font-size: 11px; font-weight: bold" />
<h:selectOneListbox value="#{empresaController.e.status}" size="1">
<f:selectItems value="#{empresaController.listaStatus}" />
</h:selectOneListbox>
<h:panelGroup />
<h:outputText value="Tipo de Empresa" style="font-size: 11px; font-weight: bold" />
<h:selectOneListbox value="#{empresaController.e.tipoEmpresa}" size="1">
<f:selectItems value="#{empresaController.tiposEmpresa}" />
</h:selectOneListbox>
</h:panelGrid>
Wagner,
Com isso no click do botão ele realiza a gravação no banco??? você alterou mais alguma coisa???
vou tentar por aqui, Cara desde já agradeço a atenção…
Gustavo, eu não tinha copiado o fim do popupPanel, mas é isso mesmo, não alterei mais nada.
Segue popupPanel completo
<rich:popupPanel header="Nova Empresa" id="savePane" domElementAttachment="parent" width="400" height="200">
<h:panelGrid columns="3" id="saveGrid">
<h:outputText value="Razao Social" style="font-size: 11px; font-weight: bold" />
<h:inputText value="#{empresaController.e.razaoSocial}" required="true" requiredMessage="Campo Obrigatorio" label="Deve ser informado a Razão Social da Empresa"/>
<h:panelGroup />
<h:outputText value="Fantasia" style="font-size: 11px; font-weight: bold" />
<h:inputText value="#{empresaController.e.fantasia}" required="true" requiredMessage="Campo Obrigatorio" label="Deve ser informado o nome fantasia da Empresa"/>
<h:panelGroup />
<h:outputText value="CGC" style="font-size: 11px; font-weight: bold" />
<h:inputText value="#{empresaController.e.cgc}" required="true" requiredMessage="Campo Obrigatorio" label="Deve ser informado o CGC da Empresa" />
<rich:message id="priceMsg2" for="price" />
<h:outputText value="Status" style="font-size: 11px; font-weight: bold" />
<h:selectOneListbox value="#{empresaController.e.status}" size="1">
<f:selectItems value="#{empresaController.listaStatus}" />
</h:selectOneListbox>
<h:panelGroup />
<h:outputText value="Tipo de Empresa" style="font-size: 11px; font-weight: bold" />
<h:selectOneListbox value="#{empresaController.e.tipoEmpresa}" size="1">
<f:selectItems value="#{empresaController.tiposEmpresa}" />
</h:selectOneListbox>
</h:panelGrid>
<h:panelGroup />
<a4j:commandButton value="Salvar" action="#{empresaController.salvar()}" render="table" execute="savePane"
oncomplete="if (#{facesContext.maximumSeverity==null}) {#{rich:component('savePane')}.hide();}" />
<a4j:commandButton value="Cancelar" onclick="#{rich:component('savePane')}.hide(); return false;" />
</rich:popupPanel>
Wagner, veja o meu:
<a4j:commandButton value="Salvar"
actionListener="#{cadastroAlunoBean.salvar}"
reRender="frm" type="submit"/>
<h:commandButton value="Cancelar" action="menu"
immediate="true"/>
Será que posso deixar igual ao seu??
e no form
adicionar o "domElementAttachment=“parent”
???
Wagner bom dia,
Cara a sua solução não deu pra resolver meu problema eu acho que na forma que estou usando este parâmetro não serve para o componente , teria um outro parâmetro que faria o mesmo efeito para o que estou usando, abaixo segue o JSP. o nome do botão é “Salvar” logo no final do código.
<%--
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">
<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 já agradeço a ajuda e a atenção.
Gustavo