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: :frowning:](//www.guj.com.br/images/emoji/twitter/frowning.png?v=6)
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: :frowning:](//www.guj.com.br/images/emoji/twitter/frowning.png?v=6)