P:selectBooleanCheckbox PrimeFaces renderizando somente desmarcado

Boa noite pessoal!

Estou com um problema com o p:selectBooleanCheckbox do PrimeFaces. Apesar de no banco o valor do booleano estar true, ao renderizar a página o checkbox sempre inicia desmarcado (false). Se eu marcar/desmarcar o checkbox e salvar, funciona perfeitamente, ou seja, está gravando como deveria true/false. O problema é na hora de carregar na página.

Gostaria de saber se alguém já passou por isso e se tem alguma ideia. Tentei também com o h:selectBooleanCheckbox, mas ocorre o mesmo.
Será que tem de usar algum conversor na view?

view.xhtml


//valorBooleano está como true, porem este checkbox inicia desmarcado...
<p:selectBooleanCheckbox  value="#{atributoCadastrado.valorBooleano}" />

Até +!

Se estiver usando algum versao 3M xxx, atualize para a 3RC.

Caso não funcione, tente usar o checkbox do JSF mesmo. [=

Boa Tarde!

Estou usando PrimeFaces 3.0.RC1, e tentei com o h:selectBooleanCheckbox… rs

Não funcionou… :frowning:

Como estás eu código JSF?

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!

[quote]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…
[/quote]
É cara, ta muito estranho mesmo. Teria que debugar mesmo viu, infelizmente não tenho como te ajudar de cabeça não.
Para boolean eu nunca vi precisar de mapeamento especial pelo JPA não viu.

[quote=jakefrog][quote]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…
[/quote]
É cara, ta muito estranho mesmo. Teria que debugar mesmo viu, infelizmente não tenho como te ajudar de cabeça não.
Para boolean eu nunca vi precisar de mapeamento especial pelo JPA não viu.[/quote]

Valeu cara, vou fazer mais uns testes aqui… Eu não tava querendo mapear em int 0 e 1, pois o hibernate já facilita: não temos de preocupar com isso… Mas se não conseguir, vai ser o jeito…

Quando faço debug, vai pro banco true e atualiza normal, porem esta atualizando os demais… Mas isso eh outro problema… O que estou achando estranho é que o JSF não apresenta o checkbox marcado mesmo se a propriedade do bean é true. Talvez seja algo por estar dentro de um p:dataTable dentro de outro p:dataTable (confusão!)… Vou testar também.

Obrigado!

Acho que descobri…

Parece ser problema ao colocar o checkbox dentro do <p:dataTable>… Se eu colocar fora, funciona! :


<p:panel>
                      <p:column headerText="Atributos">
                        <p:selectBooleanCheckbox value="true" />
                    </p:column> 

</p:panel>

Então ele vem marcado. Se eu repetir o mesmo código, porém dentro do p:dataTable, ai não renderiza marcado…

Muito estranho…

Vou continuar, ver se acho alguma solução…

Caso não funcione, tente usar o checkbox do JSF mesmo. [=[/quote]

Boa Hebert! Resolveu uma dorzinha de cabeça aqui…

abraços!

Estou com o mesmo problema do vinnysoft, porém é uma tabview ao invés de uma datatable. Fora da tabview funciona, dentro não tras marcado.

Alguém descobriu se é isso mesmo, se é bug do primefaces, se tem como contornar? Retirar o checkbox de dentro da tabview quebrará todo o layout da aplicação :frowning: