P:selectBooleanCheckbox PrimeFaces renderizando somente desmarcado

10 respostas
V

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é +!

10 Respostas

G

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

H

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

V

Boa Tarde!

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

Não funcionou… :frowning:

H

Como estás eu código JSF?

V

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!

H

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…


É 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.

V

jakefrog:
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…


É 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.

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!

V

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…

C

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

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

abraços!

L

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:

Criado 14 de dezembro de 2011
Ultima resposta 21 de nov. de 2013
Respostas 10
Participantes 5