Assim:
<p:panel id="paineltabela" header="Solicitantes Cadastrados">
<h:form id="formTabela">
<p:dataTable id="tabela"
value="#{solicitante.tabela}"
var="itemSolicitante"
rows="10"
pageLinks="5"
rowsPerPageTemplate="5,10,15"
selectionMode="single"
selection="#{solicitante.solicitanteSelecionado}"
paginator="true"
emptyMessage="Nenhum registro encontrado."
paginatorPosition="bottom"
paginatorTemplate="{RowsPerPageDropdown} {CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
>
<p:column style="width:16px">
<p:rowToggler />
</p:column>
<p:column headerText="Nome do Solicitante" sortBy="#{itemSolicitante.nome}" filterBy="#{itemSolicitante.nome}">
<h:outputText value="#{itemSolicitante.nome}"/>
</p:column>
<f:facet name="footer">
<p:commandButton value="Excluir" action="#{solicitante.removerSolicitante()}" update=":paineladicionar :paineltabela" />
</f:facet>
<p:rowExpansion>
<p:dataTable id="tabelaTexto"
value="#{itemSolicitante.atributosSolicitante}"
var="atributoCadastrado"
rows="10"
pageLinks="5"
rowsPerPageTemplate="5,10,15"
paginator="true"
paginatorAlwaysVisible="false"
emptyMessage="Nenhum registro encontrado."
paginatorPosition="bottom"
paginatorTemplate="{RowsPerPageDropdown} {CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
>
<p:column headerText="Atributos">
<h:outputText value="#{atributoCadastrado.nomeAtributo}"/>
</p:column>
<p:column headerText="Valores">
<p:cellEditor>
<f:facet name="output">
//Aqui deveria aparecer marcado, pois no banco está true...
<p:selectBooleanCheckbox value="#{atributoCadastrado.valorBooleano}"
disabled="true"
rendered="#{atributoCadastrado.tipo eq solicitante.tipoBooleano}"/>
</f:facet>
<f:facet name="input">
//Aqui deveria aparecer marcado, pois no banco está true...
<p:selectBooleanCheckbox
value="#{atributoCadastrado.valorBooleano}"
rendered="#{atributoCadastrado.tipo eq solicitante.tipoBooleano}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Options" style="width:50px">
<p:rowEditor />
</p:column>
<p:ajax event="rowEdit" listener="#{solicitante.atualizarAtributo(atributoCadastrado)}" update=":paineladicionar :paineltabela" />
</p:dataTable>
</p:rowExpansion>
</p:dataTable>
</h:form>
</p:panel>
O método atualizarAtributo pega o atributo alterado e salva no banco, e está funcionando.
Outra coisa que reparei é que quando eu altero o valor (através do cellEditor do PrimeFaces) do checkbox , todos os demais registros sao marcados para false, e somente o que eu setei true é que fica true no banco… muito estranho pois quando é na adição, não acontece isso…
Será que é algum mapeamento extra de boolean que tenho que fazer no hibernate? Estou usando MySQL…
A classe Solicitante e AtributoValor estão assim:
@Entity
public class AtributoValor extends ObjetoPersistente
{
private String nomeAtributo;
@ManyToOne
private Solicitante solicitante;
private boolean valorBooleano;
//Getters and Setters...
}
@Entity
public class Solicitante extends ObjetoPersistente
{
private String nome;
@OneToMany(mappedBy = "solicitante", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<AtributoValor> atributosSolicitante;
public Solicitante(){
atributosSolicitante = new ArrayList<AtributoValor>();
}
//Getters and Setters...
}
Alguma ideia?
Obrigado!