Eu tenho uma página xhtml e gostaria de recarregá-la em determinada ocasião dentro de um método do meu Managed Bean, como faço isto?
Recarregar página através do Managed Bean
8 Respostas
Talvez esse código te ajude:
FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
ViewHandler viewHandler = application.getViewHandler();
UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId());
context.setViewRoot(viewRoot);
Não esqueça depois de redirecionar para a página que vc deseja exibir.
Boa noite!
Bem, se vc estiver usando JSF 2.0, vc pode chamar a própria página através da navegação implícita (no método action de seu h:commandButton ou h:commandLink).
Ex:
<h:commandButton value="Recarregar" action="minhapagina" />
Ou dentro do ManagedBean, como vc sugeriu:
minhapagina.xhtml
<h:commandButton value="Recarregar" action="#{MeuBean.abrirPagina}" />
MeuBean.java
public String abrirPagina()
{
return "minhapagina";
}
Ai o FacesServlet entende que você quer ir para a página minhapagina.xhtml e faz novamente o “carregamento da página”.
O problema é que dependendo do escopo do seu Bean, os valores serão perdidos.
Até +!
Não esqueça depois de redirecionar para a página que vc deseja exibir.
Como redireciono?
Boa noite!
Bem, se vc estiver usando JSF 2.0, vc pode chamar a própria página através da navegação implícita (no método action de seu h:commandButton ou h:commandLink).
Ex:
<h:commandButton value="Recarregar" action="minhapagina" />
Ou dentro do ManagedBean, como vc sugeriu:
minhapagina.xhtml
<h:commandButton value="Recarregar" action="#{MeuBean.abrirPagina}" />
MeuBean.java
public String abrirPagina()
{
return "minhapagina";
}
Ai o FacesServlet entende que você quer ir para a página minhapagina.xhtml e faz novamente o “carregamento da página”.
O problema é que dependendo do escopo do seu Bean, os valores serão perdidos.
Até +!
Então, mas neste caso o usuário precisa clicar no commandButton, eu quero fazer isto sem intervenção do usuário.
Não esqueça depois de redirecionar para a página que vc deseja exibir.Como redireciono?
Você pode utilizar o sendRedirect do response ou o forward do requestDispatcher.
Não esqueça depois de redirecionar para a página que vc deseja exibir.Como redireciono?
Você pode utilizar o sendRedirect do response ou o forward do requestDispatcher.
Não funciona de jeito nenhum, veja meu código:
public void consultar(ActionEvent actionEvent) {
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
try {
response.sendRedirect("/Teste/Teste.pdf");
FacesContext.getCurrentInstance().responseComplete();
} catch (IOException e) {
}
}
Mas digitando manualmente este link no browser, após o IP e a porta do meu servidor, o PDF é aberto normalmente. Eu preciso abrir uma nova guia no browser com o arquivo PDF que eu quiser, mas preciso fazer isto dentro do ManagedBean porque este PDF é gerado dinamicamente e estou usando o evento actionListener do p:commandButton
Não esqueça depois de redirecionar para a página que vc deseja exibir.Como redireciono?
Você pode utilizar o sendRedirect do response ou o forward do requestDispatcher.
Não funciona de jeito nenhum, veja meu código:
public void consultar(ActionEvent actionEvent) { HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); try { response.sendRedirect("/Teste/Teste.pdf"); FacesContext.getCurrentInstance().responseComplete(); } catch (IOException e) { } }Mas digitando manualmente este link no browser, após o IP e a porta do meu servidor, o PDF é aberto normalmente. Eu preciso abrir uma nova guia no browser com o arquivo PDF que eu quiser, mas preciso fazer isto dentro do ManagedBean porque este PDF é gerado dinamicamente e estou usando o evento actionListener do p:commandButton
Boa noite!
Amigo, não entendi bem o seu problema: Você quer que sua aplicação abra uma nova janela com o PDF assim que ele terminar de ser gerado pelo sistema, sem o usuário clicar em nada?
Se for isso, penso que a solução será criar uma thread para gerar este PDF, e que abra uma view quando for finalizada. Seria isso?
Até +!
Não esqueça depois de redirecionar para a página que vc deseja exibir.Como redireciono?
Você pode utilizar o sendRedirect do response ou o forward do requestDispatcher.
Não funciona de jeito nenhum, veja meu código:
public void consultar(ActionEvent actionEvent) { HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); try { response.sendRedirect("/Teste/Teste.pdf"); FacesContext.getCurrentInstance().responseComplete(); } catch (IOException e) { } }Mas digitando manualmente este link no browser, após o IP e a porta do meu servidor, o PDF é aberto normalmente. Eu preciso abrir uma nova guia no browser com o arquivo PDF que eu quiser, mas preciso fazer isto dentro do ManagedBean porque este PDF é gerado dinamicamente e estou usando o evento actionListener do p:commandButton
Boa noite!
Amigo, não entendi bem o seu problema: Você quer que sua aplicação abra uma nova janela com o PDF assim que ele terminar de ser gerado pelo sistema, sem o usuário clicar em nada?
Se for isso, penso que a solução será criar uma thread para gerar este PDF, e que abra uma view quando for finalizada. Seria isso?
Até +!
Não é isso não. A página é uma consulta de relatório. O usuário informa os campos de filtro e clica no commandButton que dispara um actionListener que chama um método no meu Managed Bean. Este método conecta num outro servidor, passa as informações, recebe o PDF de resposta, salva este PDF na pasta da aplicação no Glassfish e preciso abrir uma nova guia no browser para exibir este PDF ao usuário. Entendeu?