Quando uma linha da tabela é selecionada o valor do petSelecionado não é alerado, fica null.
Quando a minha tabela estava como @ViewScoped funcionada…
[code]<h:form id=“listaPet”>
<p:dataTable var=“adm” value="#{listPetPlano.pets}"
paginator=“true” rows=“20”
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate=“10,20” id=“table”
selection="#{listPetPlano.petSelecionado}" selectionMode=“single”
rowKey="#{adm.nome}">
<p:ajax event="rowSelect" update=":dadosPlano:animal, :dadosPlano:tipo"/>
<p:column headerText="None" sortBy="#{adm.nome}" id="nome">
<h:outputText value="#{adm.nome}" />
</p:column>
<p:column headerText="Tipo" id="tipo">
<h:outputText value="#{adm.tipoDescricao}" />
</p:column>
<p:column headerText="Data Nascimento" id="data">
<h:outputText value="#{adm.dataNascimento}" />
</p:column>
</p:dataTable>
</h:form>[/code]
@ManagedBean(name = "listPetPlano")
public class ListPetBean implements Serializable {
private static final long serialVersionUID = 1L;
List<Pet> pets;
Pet pet;
Pet petSelecionado;
public Pet getPetSelecionado() {
return petSelecionado;
}
public void setPetSelecionado(Pet petSelecionado) {
this.petSelecionado = petSelecionado;
}
public List<Pet> getPets() {
return pets;
}
public void setPets(List<Pet> pets) {
this.pets = pets;
}
Então por que você deixa como ViewScoped?
Acho que o datatable precisa de um escopo maior que o de Request, porque não usar @ViewScope mesmo?
Então estou usando include dinâmico, sempre quando volto a página os dados continuam. Tenho várias páginas se deixar tudo ViewScoped pode gerar algum problema de desempenho?
Caso não haja problema, tem como limpar os forms ao carregar determinada página (ViewScoped).
Então estou usando include dinâmico, sempre quando volto a página os dados continuam. Tenho várias páginas se deixar tudo ViewScoped pode gerar algum problema de desempenho?
Caso não haja problema, tem como limpar os forms ao carregar determinada página (ViewScoped).[/quote]Eu acho que você precisa estudar melhor o conceito dos escopos dos ManagedBeans.
Aqui explica melhor sobre eles: JSF Mini Livro - Dicas, conceitos e boas práticas.
Então estou usando include dinâmico, sempre quando volto a página os dados continuam. Tenho várias páginas se deixar tudo ViewScoped pode gerar algum problema de desempenho?
Caso não haja problema, tem como limpar os forms ao carregar determinada página (ViewScoped).[/quote]Eu acho que você precisa estudar melhor o conceito dos escopos dos ManagedBeans.
Aqui explica melhor sobre eles: JSF Mini Livro - Dicas, conceitos e boas práticas.[/quote]
Desculpe minha ignorância, mas é que como nunca saio da página (o menu carrega um fragment no include), quando seleciono a opção x do menu(carrega o include), e volto a mesma opção mais tarde os campos aparecem preenchidos.
“@ViewScoped: Enquanto o usuário estiver na página os dados desse MB estarão vivos no servidor. Ao sair da página os dados dessa página serão eliminados da memória.”
Se os dados da página voltaram preechidos entendi que o MB continua ativo, então eles vão acumulando(MBx, MBy, MBz).
Novamente me desculpe, vou ler o link, obrigado.
Então estou usando include dinâmico, sempre quando volto a página os dados continuam. Tenho várias páginas se deixar tudo ViewScoped pode gerar algum problema de desempenho?
Caso não haja problema, tem como limpar os forms ao carregar determinada página (ViewScoped).[/quote]Eu acho que você precisa estudar melhor o conceito dos escopos dos ManagedBeans.
Aqui explica melhor sobre eles: JSF Mini Livro - Dicas, conceitos e boas práticas.[/quote]
Desculpe minha ignorância, mas é que como nunca saio da página (o menu carrega um fragment no include), quando seleciono a opção x do menu(carrega o include), e volto a mesma opção mais tarde os campos aparecem preenchidos.
“@ViewScoped: Enquanto o usuário estiver na página os dados desse MB estarão vivos no servidor. Ao sair da página os dados dessa página serão eliminados da memória.”
Se os dados da página voltaram preechidos entendi que o MB continua ativo, então eles vão acumulando(MBx, MBy, MBz).
Novamente me desculpe, vou ler o link, obrigado.[/quote]Se você nunca sai da página e está apresentando novas telas você está utilizando ajax o tempo todo né?
Então da no mesmo que usar um session scoped…
Então estou usando include dinâmico, sempre quando volto a página os dados continuam. Tenho várias páginas se deixar tudo ViewScoped pode gerar algum problema de desempenho?
Caso não haja problema, tem como limpar os forms ao carregar determinada página (ViewScoped).[/quote]Eu acho que você precisa estudar melhor o conceito dos escopos dos ManagedBeans.
Aqui explica melhor sobre eles: JSF Mini Livro - Dicas, conceitos e boas práticas.[/quote]
Desculpe minha ignorância, mas é que como nunca saio da página (o menu carrega um fragment no include), quando seleciono a opção x do menu(carrega o include), e volto a mesma opção mais tarde os campos aparecem preenchidos.
“@ViewScoped: Enquanto o usuário estiver na página os dados desse MB estarão vivos no servidor. Ao sair da página os dados dessa página serão eliminados da memória.”
Se os dados da página voltaram preechidos entendi que o MB continua ativo, então eles vão acumulando(MBx, MBy, MBz).
Novamente me desculpe, vou ler o link, obrigado.[/quote]Se você nunca sai da página e está apresentando novas telas você está utilizando ajax o tempo todo né?
Então da no mesmo que usar um session scoped…[/quote]
Sim, por isso não queria utilizar o viewscoped no bean no problema apresentando neste post…
Altere o p:ajax
<p:ajax event="rowSelect" update=":dadosPlano:animal, :dadosPlano:tipo"/>
Para
<p:ajax event="rowSelect" listener="#{listPetPlano.onRowSelect}" update=":dadosPlano:animal, :dadosPlano:tipo"/>
No ManagedBean adicione o código:
public void onRowSelect(SelectEvent slc) {
petSelecionado = (Pet) slc.getObject();
}
Depois que você seleciona, onde exibir a infomação de seleção.
[quote=ThalesSilva]Sim, por isso não queria utilizar o viewscoped no bean no problema apresentando neste post…[/quote]Desculpe, mas simplesmente alterar o escopo do MB não é a solução. Se fizer isso, muitos outros erros irão acontecer.
É preciso entender que o dataTable do primefaces para funcionar naturalmente necessita do view ou session scoped.
Se você quiser utilizar com RequestScoped vai ter que fazer muuuuita macumba e estudar muito o código deles.
É melhor você utilizar sabiamente o ViewScoped e reestruturar sua aplicação para usar o escopo corretamente. [=