Galera, boa noite, tenho um datatable com primefaces. Nele possui colunas com os dados do Tipo Documento e uma coluna chamado Ações, que tem botão Editar e Excluir. Está funcionando 100%, seta o Objeto no Bean e faz o que tem fazer, alterar e excluir. Porém quando utilizo o Filtro do Primefaces, filtro alguma coisa, ele envia o objeto Null pro Bean. Alguma sugestão? Segue meu código.
<p:layoutUnit position="center" header="Sistema" scrollable="true">
<h:form id="frmTipoDocumento">
<p:fieldset legend="Gerenciamento de Tipo de Documentos" toggleable="true">
<p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />
<h:panelGrid columns="2" id="pnTipoDocumento" style="font-family: Verdana;" >
<h:outputLabel id="lbNome" value="*Nome:" for="nome"
style="float: right;" />
<p:inputText id="nome" size="50"
value="#{tipodocumentoBean.tipoDocumento.nome}" required="true"
requiredMessage="Campo [Nome] é obrigatório." />
<h:outputLabel id="lbDepartamento" value="*Departamento: " for="departamento"
style="float: right;" />
<h:selectOneMenu id="departamento" value="#{tipodocumentoBean.departamentoID}"
required="true" requiredMessage="Campo [Departamento] é obrigatório.">
<f:selectItem itemLabel="-- Selecione --" itemValue="" />
<f:selectItems value="#{departamentoBean.listDepartamento}" var="d"
itemLabel="#{d.nome}" itemValue="#{d.id_departamento}" />
</h:selectOneMenu>
<h:inputHidden id="id_tipodoc"
value="#{tipodocumentoBean.tipoDocumento.id_tipodoc}" />
</h:panelGrid>
<h:panelGrid columns="3"
style="font-size: 12px; font-weight: bold;" >
<p:commandButton value="Gravar" action="#{tipodocumentoBean.gravar()}"
update="frmTipoDocumento, messages, dtTipoDocumentos" />
<p:commandButton value="Limpar" update="frmTipoDocumento"
process="@this" immediate="true"
action="#{tipodocumentoBean.limpar()}" />
</h:panelGrid>
<br></br>
<p:spacer height="10" />
<p:dataTable id="dtTipoDocumentos"
emptyMessage="Nenhum registro encontrado."
value="#{tipodocumentoBean.listTipoDocumento}" var="t"
style="text-align: center; font-size: 12px;" paginator="true"
rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="10,20,50">
<f:facet name="header">
<h:outputText value="Registro de Tipo de Documentos" />
</f:facet>
<p:column id="nomeColumn" filterBy="#{t.nome}" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{t.nome}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Departamento" />
</f:facet>
<h:outputText value="#{t.departamento.nome}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Ações" />
</f:facet>
<h:commandLink>
<h:graphicImage title="Editar" url="images/edite.png"
value="Editar" height="16px" width="16px" />
<p:ajax event="click"
listener="#{tipodocumentoBean.preparaEditar(t)}" update="@form" />
</h:commandLink>
<t></t>
<p:commandLink actionListener="#{tipodocumentoBean.setTipoDocumento(t)}"
onclick="confirm.show()" immediate="true">
<h:graphicImage value="images/delete.png" alt="Excluir"
title="Excluir" style="border: none" height="16px"
width="16px" />
</p:commandLink>
</p:column>
<f:facet name="footer">
<h:outputText
value="Há um total de #{tipodocumentoBean.count} Tipo de Documento(s) cadastrado(s) no sistema." />
</f:facet>
</p:dataTable>
</p:fieldset>
</h:form>
<h:form>
<p:confirmDialog
message="Tem certeza que deseja excluir este Tipo de Documento?"
header="Excluir Tipo Documento" severity="alert" widgetVar="confirm"
modal="true" appendToBody="true">
<p:commandButton value="Sim"
actionListener="#{tipodocumentoBean.excluir(t)}"
onclick="confirm.hide()" immediate="true"
update="frmTipoDocumento, messages, dtTipoDocumentos">
</p:commandButton>
<p:commandButton value="Não" onclick="confirm.hide();" />
</p:confirmDialog>
</h:form>
</p:layoutUnit>
O mais inacreditável, que possuo uma página parecida do controle de usuário, e está funcionando 100% para ambas ocasiões, tanto sem filtro ou com filtro. Lembrando que os métodos “preparaEditar” que serve para alterar, é exatamente igual, tanto pro Tipo Documento quanto pro Usuário. Meu código:
<p:layoutUnit position="center" header="Sistema" scrollable="true">
<h:form id="frmUsuario">
<p:fieldset legend="Gerenciamento de Usuários" toggleable="true">
<p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />
<h:panelGrid columns="4" id="pnUsuário" style="font-family: Verdana;"
rendered="#{facesContext.externalContext.isUserInRole('PERM_ADMIN')}">
<h:outputLabel id="lbLogin" value="*Login:" for="login"
style="float: right;" />
<p:inputText id="login" size="20" maxlength="15"
value="#{usuarioBean.usuario.login}" required="true"
requiredMessage="Campo [Login] é obrigatório."
disabled="#{usuarioBean.alteracaoLogin()}" />
<h:outputLabel id="lbNome" value="*Nome:" for="nome"
style="float: right;" />
<p:inputText id="nome" size="50"
value="#{usuarioBean.usuario.nome}" required="true"
requiredMessage="Campo [Nome] é obrigatório." />
<h:outputLabel id="lbSenha" value="*Senha: " for="senha"
style="float: right;" />
<p:password id="senha" size="20" maxlength="6"
value="#{usuarioBean.usuario.senha}" required="true"
requiredMessage="Campo [Senha] é obrigatório." />
<h:outputLabel id="lbAtivo" value="*Ativo: " for="ativo"
style="float: right;" />
<h:selectOneRadio id="ativo" value="#{usuarioBean.usuario.ativo}"
required="true" requiredMessage="Campo [Ativo] é obrigatório.">
<f:selectItem itemLabel="Sim" itemValue="1" />
<f:selectItem itemLabel="Não" itemValue="0" />
</h:selectOneRadio>
<h:outputLabel id="lbRg" value="RG:" for="rg"
style="float: right;" />
<p:inputText id="rg" size="20" maxlength="15"
value="#{usuarioBean.usuario.rg}" />
<h:outputLabel id="lbPerfil" value="*Perfil: " for="perfil"
style="float: right;" />
<h:selectOneRadio id="perfil"
value="#{usuarioBean.usuario.perfil}" required="true"
requiredMessage="Campo [Perfil] é obrigatório.">
<f:selectItem itemLabel="Administrador" itemValue="Administrador" />
<f:selectItem itemLabel="Usuário" itemValue="Usuário" />
</h:selectOneRadio>
<h:outputLabel id="lbCpf" value="CPF:" for="cpf"
style="float: right;" />
<p:inputMask mask="999.999.999-99" id="cpf" size="20"
value="#{usuarioBean.usuario.cpf}" />
<h:inputHidden id="id_usuario"
value="#{usuarioBean.usuario.id_usuario}" />
</h:panelGrid>
<h:panelGrid columns="3"
style="font-size: 12px; font-weight: bold;"
rendered="#{facesContext.externalContext.isUserInRole('PERM_ADMIN')}">
<p:commandButton value="Gravar" action="#{usuarioBean.gravar()}"
update="frmUsuario, messages, dtUsuarios" />
<p:commandButton value="Limpar" update="frmUsuario"
process="@this" immediate="true"
action="#{usuarioBean.limpar()}" />
</h:panelGrid>
<br></br>
<p:spacer height="10" />
<p:dataTable id="dtUsuarios"
emptyMessage="Nenhum registro encontrado."
value="#{usuarioBean.listUsuario}" var="u"
style="text-align: center; font-size: 12px;" paginator="true"
rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="10,20,50">
<f:facet name="header">
<h:outputText value="Registro de Usuários" />
</f:facet>
<p:column id="nomeColumn" filterBy="#{u.nome}"
headerText="Filtrar por nome" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{u.nome}" />
</p:column>
<p:column id="loginColumn" filterBy="#{u.login}"
headerText="Filtrar por login" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Login" />
</f:facet>
<h:outputText value="#{u.login}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Perfil" />
</f:facet>
<h:outputText value="#{u.perfil}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Ativo" />
</f:facet>
<h:outputText value="#{u.ativo}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="RG" />
</f:facet>
<h:outputText value="#{u.rg}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="CPF" />
</f:facet>
<h:outputText value="#{u.cpf}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Ações" />
</f:facet>
<h:commandLink>
<h:graphicImage title="Editar" url="images/edite.png"
value="Editar" height="16px" width="16px" />
<p:ajax event="click"
listener="#{usuarioBean.preparaEditar(u)}" update="@form" />
</h:commandLink>
<t></t>
<p:commandLink actionListener="#{usuarioBean.setUsuario(u)}"
onclick="confirm.show()" immediate="true">
<h:graphicImage value="images/delete.png" alt="Excluir"
title="Excluir" style="border: none" height="16px"
width="16px" />
</p:commandLink>
</p:column>
<f:facet name="footer">
<h:outputText
value="Há um total de #{usuarioBean.count} Usuário(s) cadastrado(s) no sistema." />
</f:facet>
</p:dataTable>
</p:fieldset>
</h:form>
<h:form>
<p:confirmDialog
message="Tem certeza que deseja excluir este usuário?"
header="Excluir registro" severity="alert" widgetVar="confirm"
modal="true" appendToBody="true">
<p:commandButton value="Sim"
actionListener="#{usuarioBean.excluir(u)}"
onclick="confirm.hide()" immediate="true"
update="frmUsuario, messages, dtUsuarios">
</p:commandButton>
<p:commandButton value="Não" onclick="confirm.hide();" />
</p:confirmDialog>
</h:form>
</p:layoutUnit>