Galera, bom dia.
Hoje de madrugada esgotou todas minhas idéias para atualizar uma página jsf.
é o seguinte:
- Quando carrego a primeira vez a página ele me carrega os dados certinhos;
- na segunda vez para frente, os dados ficam os mesmos que foram gerados na primeira vez.
A questão é, como forçar o JSF identificar que é para ele processar a página novamente?
segue trechos dos códigos:
<h:body>
<h:form id="formPrincipal">
<p:menubar>
<p:submenu label="Compras">
<p:menuitem value="Produtos" url="compra.jsf"/>
<p:menuitem value="Relatório de Compras" url="compraRelatorio.jsf" actionListener="#{compraRelatorioBean.carregarDados}" />
</p:submenu>
<p:submenu label="Manutenção">
<p:menuitem value="Fornecedores" url="fornecedor.jsf"/>
<p:menuitem value="Produtos" url="produto.jsf" />
<p:menuitem value="Usuários" url="#" />
</p:submenu>
</p:menubar>
</h:form>
<br />
<br />
<br />
<h:form prependId="false">
<p:dataTable id="dataTable" var="compra"
value="#{compraRelatorioBean.listaCompra}" paginator="true" rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15" emptyMessage="Não há compras cadastradas.">
<f:facet name="header">
Compras Efetuadas
</f:facet>
<p:column>
<f:facet name="header">
<h:outputText value="Código" />
</f:facet>
<h:outputText value="#{compra.compraCodigo}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Nota Fiscal " />
</f:facet>
<h:outputText value="#{compra.compraNotaFiscal}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Fornecedor" />
</f:facet>
<h:outputText value="#{compra.compraDataRecebimento}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Data Recebimento" />
</f:facet>
<h:outputText value="#{compra.compraDataRecebimento}" />
</p:column>
</p:dataTable>
</h:form>
</h:body>
Bom dia, qual o escopo do teu ManagedBean?
Vc está utilizando ajax do Primefaces?
Se sim, você deu update no datatable?
Bom dia,
estou usando o session.
O que eu faço é registrar os dados em uma tela e redireciono para outra, a unica coisa que eu não consigo forçar a atualização da página.
[]´s
Nilson
[quote=nilsonmassarenti]Bom dia,
estou usando o session.
O que eu faço é registrar os dados em uma tela e redireciono para outra, a unica coisa que eu não consigo forçar a atualização da página.
[]´s
Nilson[/quote]E como vocÊ faz isso?
é o seguinte. Eu tenho uma página de cadastro de uma venda. Ele pode registrar quantos vendas quiser.
Depois que ele termina de fazer tudo o que quer, ele acessa a página (diferente do cadastro) que ve todas as compras registradas.
Como eu disse, quando a página nunca foi carregada, ele carrega todos os dados, mas se em algum momento foi carregada, todos os dados anteriores ficam em “CACHE” e não são carregado novas atualizações.
Para sintetizar é realizado uma compra, o cara clica no menu bar e é redirecionado para o relatório das compras.
[quote=nilsonmassarenti]é o seguinte. Eu tenho uma página de cadastro de uma venda. Ele pode registrar quantos vendas quiser.
Depois que ele termina de fazer tudo o que quer, ele acessa a página (diferente do cadastro) que ve todas as compras registradas.
Como eu disse, quando a página nunca foi carregada, ele carrega todos os dados, mas se em algum momento foi carregada, todos os dados anteriores ficam em “CACHE” e não são carregado novas atualizações.
Para sintetizar é realizado uma compra, o cara clica no menu bar e é redirecionado para o relatório das compras.
[/quote]
Amigão, tente ser mais assertivo.
quando alguém pergunta como você fez? provavelmente está querendo código.
Com certeza a explicação do funcionamento da tela pode ajudar, mas se postar códigos de exemplo, vai facilitar muito mais a vida de todos 
Meus caros,
conforme o digaoneves disse para ser mais direto nas coisas. Acho que eu fui claro que é forçar a atualização de uma página jsf esm precisar aplicar um update no dataTable, sabendo que ao acaso posso chamar a página (Código no primeiro POST). Caso não tenha ficado claro, preciso saber o que preciso postar para ajudar.
Mas segue parte do código do bean
package br.com.almeidasirtoli.aplicacao.bean;
import java.util.ArrayList;
import java.util.Iterator;
import br.com.almeidasirtoli.aplicacao.dao.DAOCompra;
import br.com.almeidasirtoli.aplicacao.principal.Compra;
public class CompraRelatorioBean {
private ArrayList<Compra> listaCompra = new ArrayList<Compra>();
private ArrayList<Object> listaCompras;
public CompraRelatorioBean() {
carregarDados();
}
public void carregarDados(){
DAOCompra dbCompra = new DAOCompra();
Object o = null;
this.listaCompras = dbCompra.read(o);
System.out.println("Tamanho: " + listaCompras.size());
Iterator<Object> it = this.listaCompras.iterator();
while (it.hasNext()){
Compra compra = (Compra) it.next();
listaCompra.add(compra);
}
}
public ArrayList<Compra> getListaCompra() {
return listaCompra;
}
}
[]´s
Nilson
Amigo como os colegas acima falaram, daria para ser feito usando ajax do primefaces, que é um ótimo recurso, agora já que você não quer usar, você pode usar esse método na sua bean após a execução do conteudo do método chamado você chamaria esse método
public void refresh() {
FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
ViewHandler viewHandler = application.getViewHandler();
UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId());
context.setViewRoot(viewRoot);
context.renderResponse();
}
espero ter ajudado.
att.,
1 curtida
Rafael,
não é que eu não queira usar, é pq não dá do jeito que está sendo feito.
última dúvida para terminar como chamo esse método dentro do JSF?
[]´s
Nilson
exemplo:
public void salvar(){
this.controllerUsuario.save(usuario);
this.refresh();
}
ele ira forçar o contexto do JSF, para que o mesmo seja atualizado.
entendeu?
1 curtida
Sò ficou uma dúvida. em qual momento ele irá chamar o salvar?
Então cara é muito simples, na sua pagina .XHTML você não tem um botão com action chamando um método qualquer na bean seja ele salvar alterar ou excluir ou consultar
ex:
#{pessoaBean.salvar}
#{pessoaBean.alterar}
etc. isso são EL expression Language que chamam métodos diretamente na sua Bean, certo?
então dentro de um método qualquer que você queira fazer com que a pagina .XHTML seja recarregada você chama esse método refresh
<h:commandButton value="Salvar" id="botaoSalvar" name="botaoSalvar"
action="#{suaVisao.seuMetodo}">
Bean
public void seuMetodo(){
suaController.save(seuObjeto); // até aqui é tudo normal a unica diferença, ou seja onde seu método será chamado é aqui
this.refresh();
}
public void refresh() {
FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
ViewHandler viewHandler = application.getViewHandler();
UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId());
context.setViewRoot(viewRoot);
context.renderResponse();
}
entendeu companheiro?
abraços.
Coloca seu Bean no escopo de View.
ressuscitaram o topico oO?