Pessoal, boa noite.
Estou tendo problemas com o método de inicialização, juntamente com o escopo de visão do Spring.
Tenho um template e basicamente defino uma área onde altero o corpo da página via Ajax, evitando assim que
eu venha renderizar a página completamente.
<ui:define name="content">
<h:panelGroup id="panelContent" layout="block">
<ui:include src="#{companyBean.viewPage}" />
</h:panelGroup>
</ui:define>
Tenho uma página inicial default.xhtml, e conforme vou chamando as páginas no menu, seto a viewPage com o valor
da página que desejo exibir.
Essa página default, fica responsável por disparar o método init do managed bean “CompanyBean”
<f:metadata>
<f:event type="preRenderView" listener="#{companyBean.init()}"/>
</f:metadata>
Demais chamadas de menu, alterando a página a ser exibida:
<ul class="dropdown-menu">
<li>
<h:commandLink value="#{msgs['label.viewGallery']}" action="#{companyBean.preparePage('gallery/viewGallery.xhtml')}"
actionListener="#{companyGalleryBean.init()}">
<f:ajax execute="@this" render=":panelContent" />
</h:commandLink>
</li>
</ul>
Método que altera a página a ser exibida:
public void preparePage(String page) {
setViewPage(page);
}
Onde está o problema? Ao chamar por exemplo a página viewGallery, o método “init” do managed bean CompanyGalleryBean
é chamado, até aí tudo ok, porém posteriormente como o escopo de visão é perdido, a página default.xhtml é restaurada, e o método
init do managed bean CompanyBean é chamado novamente, e a página fica presa no default.xhtml, e não é redirecionada para o viewGallery.
Numa segunda chamada, a página até é redirecionada para a viewGallery, porém como tenho um botão “novo” dentro
dessa página, ao acioná-lo, novamente perco a viewGallery do managed bean “CompanyBean”, e a página default.xhtml volta a ser a definida
no atributo “viewPage”.
Alguém sabe como solucionar esse problema? Antes da hipótese levantada, não acho adequado para este caso definir
esse managed bean com o escopo de Session, pois senão ficaria armazenando na sessão algumas coisas desnecessárias.
Também já tentei a utilização da anotação @PostConstruct, mas o comportamento é o mesmo.
Agradeço desde já,
Att,
Lessandro Notaroberto Pyrâmides
Analista de Sistemas Java Web e Android
Bacharelado em Sistemas de Informação - FMG
MBA em Gestão de Projetos em TI – UFJF
Email: lessandron...@gmail.com
Skype: lessandromg
Tels: +55 (32) 3213-6295 / +55 (32) 9108-6144
Juiz de Fora - MG
Oi Rafael, boa noite.
A versão é a Mojarra 2.2.8. No escopo de sessão do Spring, a navegação ocorre normalmente,
mas o método de inicialização é disparado mais de uma vez, então o problema ocorre parcialmente.
O escopo de visão utilizado é o customizado do Spring. Tenho customizado aqui o escopo de visão
e flash, mas por agora tenho utilizado apenas o de visão. Teoricamente, a mudança de página não
deveria ser considerada, afinal estou utilizando mudança apenas na parte central. Vou analisar essa
questão do h:link e h:button.
Obrigado pela contribuição,
Att,
Lessandro
De: jav...@googlegroups.com [mailto:jav...@googlegroups.com] Em nome de Rafael Ponte
Enviada em: terça-feira, 26 de maio de 2015 22:19
Para: jav...@googlegroups.com
Cc: jav...@googlegroups.com; javano...@googlegroups.com
Assunto: [javace] Re: [javasf] Problema com método de inicialização
Olá,
Qual a versão do JSF você está usando? Já verificou se este problema acontece quando o escopo é sessão?
Outra dúvida, está usado @ViewScoped ou escopo view customizado do Spring?
Uma limitação do @ViewScoped é que ele se perde ao navegar entre páginas. Seja via ajax ou não. Por esse motivo, costumo recomendar que a entrada em cada página inicial de uma funcionalidade seja por navegação comum, através de um link HTML padrão. Nesse caso o componente h:link ou h:button pode ajudar se você achar mais conveniente.
Um abraço!
--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/javasf.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/javasf/!%26!AAAAAAAAAAAYAAAAAAAAAIDG0h5s2GpCnXYRfYpy6fuigQAAEAAAAI9e0kwrbkBBnjdhI5BGCtEBAAAAAA%3D%3D%40gmail.com.
Para mais opções, acesse https://groups.google.com/d/optout.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br
--
Você recebeu essa mensagem porque está inscrito no grupo "java.ce" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javace+un...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para jav...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/javace.
Para mais opções, acesse https://groups.google.com/d/optout.
Fala Arthur, bom dia, tudo bem?
Já tentei utilizar a viewAction, porém se coloco a mesma em cada página que será
renderizada no centro, o evento nem é disparado.
O mesmo dispara somente na página que implementa o template.
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
template="#{request.contextPath}/resources/templates/template.xhtml"
xmlns:sc="http://java.sun.com/jsf/composite/components">
<ui:define name="metadata">
<f:metadata>
<f:viewAction action="#{companyBean.init()}" onPostback="true" />
</f:metadata>
</ui:define>
Nas demais páginas, defino dessa forma:
<f:metadata>
<f:viewAction action="#{companyProductBean.init()}" onPostback="true" />
</f:metadata>
Para esses dois questionamentos não faço tratamento, utilizando o preRenderView:
- seu metodo é invocado varias vezes devido a página enviar um postback e no seu metodo você não trata esta situação
- o evento de preRenderView não trata de forma "automatica" o postback
public void init() {
if (!FacesContext.getCurrentInstance().isPostback()) {
// ...
}
}
Obrigado,
Abs,
Lessandro
De: jav...@googlegroups.com [mailto:jav...@googlegroups.com] Em nome de Arthur Gregório
Enviada em: quarta-feira, 27 de maio de 2015 08:52
Para: jav...@googlegroups.com
Cc: javace; javano...@googlegroups.com
Assunto: Re: [javace] Re: [javasf] Problema com método de inicialização
Li bem por cima do assunto, mas 2 coisas:
- seu metodo é invocado varias vezes devido a página enviar um postback e no seu metodo você não trata esta situação
- o evento de preRenderView não trata de forma "automatica" o postback
- se vc esta usando o JSF 2.2 por que não usar viewAction? nele você já consegue tratar esta situação do postback pelo parametro onPostback="true"
Se não estou muito enganado, para cada ação ajax que vc executar, um postback na página será executado.
at.,
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/javasf/!%26!AAAAAAAAAAAYAAAAAAAAAIDG0h5s2GpCnXYRfYpy6fuigQAAEAAAAML9Fqj6WsFCqL89aDjT%2BfABAAAAAA%3D%3D%40gmail.com.
Para mais opções, acesse https://groups.google.com/d/optout.
--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/javasf.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/javasf/CA%2BUvXk%2BR3qkpYCXYBimmkaG58PjAqYVQyZD%3D2Qi3aJtXNvxA%2Bw%40mail.gmail.com.
O que quero dizer em definir a utilização do template em todas as páginas, ao invés de
alterar o include apenas no centro, é por causa disso:
Reparem que o footer foi renderizado novamente, ou seja, a página é recarregada completamente.
Por isso a melhor solução nesse caso seria utilizar página dinâmica, e é isso que estou tentando com o
<f:viewAction ou <f:event, porém tenho que checar se não foi PostBack e mesmo assim para a navegação
de páginas não funciona, pois será um PostBack.
Abs,
Att,
Lessandro Notaroberto Pyrâmides
Analista de Sistemas Java Web e Android
Bacharelado em Sistemas de Informação - FMG
MBA em Gestão de Projetos em TI – UFJF
Email: lessandron...@gmail.com
Skype: lessandromg
Tels: +55 (32) 3213-6295 / +55 (32) 9108-6144
Juiz de Fora - MG
De: Lessandro Notaroberto Pyrâmides [mailto:lessandron...@gmail.com]
Enviada em: quarta-feira, 27 de maio de 2015 22:09
Para: jav...@googlegroups.com
Assunto: RES: [javace] Re: [javasf] Problema com método de inicialização
@Rafael Ponte, boa noite.
Aproveitando a sugestão que me fez, a alguns posts atrás, fiz a alteração para utilizar o <h:link.
<h:link value="#{msgs['label.manageProducts']}" outcome="product/manageProducts.xhtml" />
Também retornei para o <f:event, como disse o <f:viewAction não faz chamada caso eu não o coloque na
página de implementação do template.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:sc="http://xmlns.jcp.org/jsf/composite/components">
<f:metadata>
<f:event type="preRenderView" listener="#{companyProductBean.init()}"/>
</f:metadata>
<section class="title">
<div class="container">
<div class="row-fluid">
<div class="span6">
<ul class="breadcrumb pull-right">
<li><a href="home.xhtml">Home</a> <span class="divider">/</span></li>
<li><a href="#">#{msgs['label.config']}</a> <span class="divider">/</span></li>
<li class="active">#{msgs['label.manageProducts']}</li>
</ul>
</div>
</div>
</div>
</section>
Para sanar o problema das chamadas, inclusive as realizadas por post, executo apenas o init caso não seja “post”,
ou seja, get.
public void init() {
try {
if (!FacesUtils.getContext().isPostback()) {
O problema que estou tendo agora é que o <h:link, assim como o <h:outputLink, não faz utilização do template, e pelo fato
de estar utilizando página dinâmica, apenas a página chamada é exibida, sem o conteúdo do template, com header,
footer, etc.
Tem alguma sugestão?
Obrigado,
Abs,
Lessandro
De: jav...@googlegroups.com [mailto:jav...@googlegroups.com] Em nome de Rodolpho Sbaraglini Couto
Enviada em: quarta-feira, 27 de maio de 2015 14:13
Para: jav...@googlegroups.com
Assunto: Re: [javace] Re: [javasf] Problema com método de inicialização
Tente colocar a tag <f:metadata> dentro do <h:head>.
Em quarta-feira, 27 de maio de 2015 13:56:17 UTC-3, Lessandro Notaroberto Pyrâmides escreveu:
Arthur e Rodolpho, o problema aparentemente não estava nos namespaces.
A página default.xhtml foi renderizada no corpo, mas a action “init” não foi
disparada.
Parte do template.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
template="#{request.contextPath}/resources/templates/template.xhtml"
xmlns:sc="http://xmlns.jcp.org/jsf/composite/components">
<ui:define name="content">
<h:panelGroup id="panelContent" layout="block">
<ui:include src="#{companyBean.viewPage}" />
</h:panelGroup>
</ui:define>
Página default.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<f:metadata>
<f:viewAction action="#{companyBean.init()}" onPostback="true" />
</f:metadata>
<section class="title">
<div class="container">
<div class="left row-fluid">
<div class="span6">
<h1>Home</h1>
</div>
</div>
</div>
</section>
</html>
Abs,
Att,
Lessandro
De: jav...@googlegroups.com [mailto:jav...@googlegroups.com] Em nome de Arthur Gregório
Enviada em: quarta-feira, 27 de maio de 2015 09:30
Para: jav...@googlegroups.com
Assunto: Re: [javace] Re: [javasf] Problema com método de inicialização
Observação super importante do Rodolpho, pode ser que o viewAction não funcione se não estiver com os NS certos.
Em 27 de maio de 2015 09:19, Rodolpho Sbaraglini Couto <rodolpho....@gmail.com> escreveu:
Cara, aproveitando... percebi que seus namespaces estão obsoletos, isso pode causar problemas.
Substitua-os para o JSF 2.2:
...
--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/javasf.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/javasf/229612ad-c109-4dc5-81da-8061079f25f3%40googlegroups.com.
Então Rafael, mas o problema é com relação à performance...
Nesse caso estou definindo apenas um footer, imagina alguma parte da página que
seja pesada, e se repita em várias outras. Seria bem complicado ficar carregando
tudo novamente...
L
Abs
De: jav...@googlegroups.com [mailto:jav...@googlegroups.com] Em nome de Rafael Ponte
Enviada em: quinta-feira, 28 de maio de 2015 10:19
Para: jav...@googlegroups.com
Cc: javace; javano...@googlegroups.com
Assunto: Re: [javace] Re: [javasf] Problema com método de inicialização
Olá,
Normalmente eu prefiro que todas as minhas páginas sigam um template e sejam acessadas pela 1a vez através de uma requisição GET, depois disso podemos optar por navegação via ajax dentro daquela funcionalidade.
Não curto seguir o modelo SPA (Single Page Application) com JSF.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/javasf/!%26!AAAAAAAAAAAYAAAAAAAAAIDG0h5s2GpCnXYRfYpy6fuigQAAEAAAABAWBHo/5T5Gn9J4M7EGk%2BMBAAAAAA%3D%3D%40gmail.com.
Para mais opções, acesse https://groups.google.com/d/optout.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br
--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/javasf.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/javasf/CAJswn6xd%2B-u-8H8MKTN%3DkwZDXaOm255jrc8FE%3D7cicGaqauhiA%40mail.gmail.com.
O conceito seria sim de SPA sim Charles, pois estou mudando apenas o centro. A página é quase toda estática, onde apenas
esse centro é alterado. Menu, footer, header, e outros fragmentos são estáticos.
Realmente, está dando uma trabalheira danada, e até agora não consegui resolver o problema L
Abs
De: jav...@googlegroups.com [mailto:jav...@googlegroups.com] Em nome de Charles Queiroz
Enviada em: quinta-feira, 28 de maio de 2015 10:25
Para: jav...@googlegroups.com
Cc: JavaCE; javano...@googlegroups.com
Assunto: Re: RES: [javace] Re: [javasf] Problema com método de inicialização
Pelo o que vc falou agora, você quer usar Single Page Application com JSF?
Acho que até consegue, mas é um trabalhão… pq o JSF não foi “desenhado” pra esse modelo de app…
Não seria melhor usar outra tecnologia? AngularJS por exemplo já é feito pra esse tipo de abordagem. Mas dai não sei como é o seu projeto. Mas é isso mesmo? SPA com JSF?
Enfim… dá, dá… mas olha aew a trabalhera que está dando…
Atenciosamente,
Charles Queiroz
Dazen™ IT Services
Technology - Software Development
cha...@dazen.com.br
Fortaleza - CE
Phone: +55 85 9933 1585
On May 28, 2015, at 10:15, Lessandro Notaroberto Pyrâmides <lessandron...@gmail.com> wrote:
O que quero dizer em definir a utilização do template em todas as páginas, ao invés de
alterar o include apenas no centro, é por causa disso:
<image001.png>
<image002.png>
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/javasf/!%26!AAAAAAAAAAAYAAAAAAAAAIDG0h5s2GpCnXYRfYpy6fuigQAAEAAAABAWBHo/5T5Gn9J4M7EGk%2BMBAAAAAA%3D%3D%40gmail.com.
Para mais opções, acesse https://groups.google.com/d/optout.
--
Você recebeu essa mensagem porque está inscrito no grupo "java.ce" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javace+un...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para jav...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/javace.
Existe até algo sendo explorado nesse link, porém eles utilizam o termo de SPI.
Abs,
Lessandro
É amigos, estou realmente quase abandonando SPA.
Reparei que o escopo de visão do Spring que estou utilizando é perdido em vários momentos,
mesmo estando na mesma página (fragmento da página). Até mesmo ao acionar uma simples
action para instanciar um novo produto via ajax, o usuário logado no sistema que foi
repassado para esse managed bean é perdido, assim estados de outras variáveis.
Abs
--
--
Você recebeu esta mensagem porque está inscrito no Grupo "javanoroeste" .
Academia Java e Academia Web em São José do Rio Preto.
DESTAQUE
http://www.destaquecapacitacao.com.br/
F: (17) 3216-7475 - fal...@destaquecapacitacao.com.br
Parceira oficial da Globalcode em SJ Rio Preto
--
Postar neste grupo, envie um e-mail para javano...@googlegroups.com
Cancelar inscrição envie e-mail para javanoroeste...@googlegroups.com
Mais opções, visite este grupo em http://groups.google.com/group/javanoroeste?hl=pt-BR
http://www.javanoroeste.com.br
---
Você recebeu essa mensagem porque está inscrito no grupo "javanoroeste" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javanoroeste...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.
Luciano Sasso
Vieira Data Scientist & Solutions Architect luc...@gsgroup.com.br | tel: 17 3353-0833 | cel: 17 99706-9335 |
||
www.gsgroup.com.br | ||
Este email foi escaneado pelo Avast antivírus.
|
Então amigo, aproveito a oportunidade, alterei todas as páginas para utilizar o template
e funcionou como o esperado. Parece que o JSF 2.3 fornecerá suporte SPA, permitindo
integração com frameworks como Angular, etc...
http://pt.slideshare.net/ianhlavats/jsf-23-presentation-integration-with-frontend-frameworks
As páginas seguiram basicamente o modelo abaixo:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
template="#{request.contextPath}/resources/templates/template.xhtml"
xmlns:sc="http://xmlns.jcp.org/jsf/composite/components">
<ui:define name="header">
<ui:include src="header.xhtml" />
</ui:define>
<ui:define name="metadata">
<f:metadata>
<f:viewAction action="#{adminBean.init}" onPostback="true" />
</f:metadata>
</ui:define>
<ui:define name="content">
<section class="title">
<div class="container">
<div class="left row-fluid">
<div class="span6">
<h1>Home</h1>
</div>
</div>
</div>
</section>
</ui:define>
<ui:define name="bottom">
<ui:include src="#{request.contextPath}/resources/includes/bottom.xhtml" />
</ui:define>
<ui:define name="footer">
<ui:include src="#{request.contextPath}/resources/includes/footer.xhtml" />
</ui:define>
</ui:composition>
Abs,
Att,
Lessandro