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