aaaah vamos ver, nao tinha atentado pra esse detalhe<h:commandLink action="outrapagina" value="Admin" />
colocar o nome da regra de navegação no lugar do nome da pagina…
Veja ai…
é continuou não aparecendo a url da pagina carregada, mesmo com a alteração acima
Veja…o filtro esta interceptando todos dos HTTP GET que a navegador esta fazendo - CSS, JS, IMAGENS etc…porque sua pagina não aparece?? kkkkkk
A unica forma de sua pagina não esta aparecendo é ela não estar sendo chamando…ou ela esta sendo chamado e o filtro não esta sendo executando quando na hora de navegação…
Eu não sei mais como te ajudar…só depurando mesmo…
caramba qui zica meu, kkkk nao sei mais o q tentar tbem
O projeto é grande?
Ta rodando aonde?
talvez te ajude a me ajudar mais um pouco, na pagina enviarPromocoesCliente.xhtml tem um commandlink<h:commandLink action="voltarIndex" value="Voltar para página inicial" />
no faces-config.xml tem a sua devida regra declarada<navigation-rule>
<navigation-case>
<from-outcome>voltarIndex</from-outcome>
<to-view-id>/index.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
e quando eu clico para voltar pra pagina index.xhtml no browser aparece o seguinte erroThis XML file does not appear to have any style information associated with it. The document tree is shown below.
<partial-response>
<changes>
<update id="javax.faces.ViewState">
<![CDATA[ 318739541256570587:-1634689407217682932 ]]>
</update>
</changes>
<extension primefacesCallbackParam="validationFailed">{"validationFailed":false}</extension>
</partial-response>
só que nessa hora, aparece a bendita url nos System.out lá na classe que intercepta…
[quote=cleiton herrmann]talvez te ajude a me ajudar mais um pouco, na pagina enviarPromocoesCliente.xhtml tem um commandlink<h:commandLink action="voltarIndex" value="Voltar para página inicial" />
no faces-config.xml tem a sua devida regra declarada<navigation-rule>
<navigation-case>
<from-outcome>voltarIndex</from-outcome>
<to-view-id>/index.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
e quando eu clico para voltar pra pagina index.xhtml no browser aparece o seguinte erroThis XML file does not appear to have any style information associated with it. The document tree is shown below.
<partial-response>
<changes>
<update id="javax.faces.ViewState">
<![CDATA[ 318739541256570587:-1634689407217682932 ]]>
</update>
</changes>
<extension primefacesCallbackParam="validationFailed">{"validationFailed":false}</extension>
</partial-response>
só que nessa hora, aparece a bendita url nos System.out lá na classe que intercepta…[/quote]]
Tem coisa errada…vc deve estar usando alguma coisa do prime que esta fazendo estes comportamentos inesperados…isso ta parecendo que vc ta trocando de paginas usando AJAX…
Posta sua pagina index ai…
então FernandoFranzini, o projeto não é grande não, pelo menos em principio, consiste numa pagina inicial que vai exibir um catalogo, nela também existirão alguns filtros para pesquisar produtos, e quando for feita uma pesquisa, o catalogo não é mostrado, e sim um datagrid com os produtos encontrados… também tem um p:dialog pro cliente se cadastrar e receber promocoes por email e um p:dialog para exibir os detalhes do produto selecionado, isso tudo é acessível para qualquer pessoa, dai tem a pagina usada pra montar um email e ativar o processo de envio para os clientes cadastrados… haverão mais coisas, mas por hora é isso que será feito e colocado no ar… segue abaixo a index.xhtml, meio grande o código mais tah ai…[code]<?xml version='1.0' encoding='UTF-8' ?>
<h:head>
<title>Atacado Super B</title>
<link href="./estilos/estilos.css" rel="stylesheet" type="text/css" />
</h:head>
<h:body>
<h:form prependId="false" >
<p:growl id="messages" showDetail="true" life="2000" />
<h:commandLink action="outrapagina" value="Admin" />
<h:panelGrid id="pgLogin" columns="1" style="width:100%;text-align: right" border="1">
<p:outputPanel>
<h:outputText id="usuario"
value="#{mBUsuarioLogado.usuarioLogado.nome}"
rendered="#{not empty mBUsuarioLogado.usuarioLogado}"/>
<h:outputText value="Nome:"/>
<p:inputText id="nomeusuario"
value="#{mBUsuarioLogado.nome}"
style="width: 70px;font-family: Tahoma;font-size: 12px"/>
<h:outputText value="Senha:" />
<p:password id="senhausuario"
value="#{mBUsuarioLogado.senha}"
feedback="false"
style="width: 70px;font-family: Tahoma;font-size: 12px"
minLength="3"/>
<p:commandButton value="Entrar"
action="#{mBUsuarioLogado.login()}"
update="messages,pgLogin,usuario"
style="width: 50px;font-family: Tahoma;font-size: 12px"
rendered="#{empty mBUsuarioLogado.usuarioLogado}"/>
<p:commandButton value="Sair"
action="#{mBUsuarioLogado.logout()}"
update="messages,pgLogin,usuario"
style="width: 50px;font-family: Tahoma;font-size: 12px"
rendered="#{not empty mBUsuarioLogado.usuarioLogado}"/>
</p:outputPanel>
</h:panelGrid>
<h:panelGrid columns="3" style="width:100%; font-family: Tahoma; font-size: 12px">
<h:column>
<div align="center">
<p:graphicImage value="/imagens/frenteSuperB.png" />
</div>
</h:column>
<h:column>
<div align="center">
<h:outputText value="#{mBCabecalhoPaginaInicial.apresentacao}" escape="false"/>
<p:commandLink oncomplete="cadastroEmailDialog.show()">
<h:outputText value="#{mBCabecalhoPaginaInicial.ofertaEmail}" escape="false"/>
</p:commandLink>
</div>
</h:column>
<h:column>
<div align="center">
<p:graphicImage value="/imagens/logoSuperB.png"/>
</div>
</h:column>
</h:panelGrid>
<p:separator style="width:100%;height:1px; font-family: Tahoma; font-size: 12px;background-color: gold;border-style: solid" />
<h:panelGrid id="pgPrincipal"
columns="2"
columnClasses="colFiltros, pgPrincipalCol2">
<h:panelGrid id="filtro" columns="2" columnClasses="coluna1,coluna2">
<f:facet name="header">
<h:outputText value="Pesquisa de produtos" />
</f:facet>
<h:outputText value="Código:" />
<p:inputText id="codigo"
value="#{mBProduto.codigoFiltro}" required="false"
style="width: 200px;"/>
<h:outputText value="Descrição:" />
<p:inputText id="descricao"
value="#{mBProduto.nomeFiltro}" required="false"
style="width: 200px"/>
<f:facet name="footer">
<p:separator style="width:100%;height:1px;" />
<p:commandButton value="Filtrar produtos"
action="#{mBProduto.listarProdutos()}"
update="pgPrincipal,listaProdutosGrid"
style="font-family: Tahoma;font-size: 12px;width: 120px"/>
<p:commandButton value="Limpar filtros"
action="#{mBProduto.limparFiltros()}"
update="pgPrincipal,listaProdutosGrid,filtro"
style="font-family: Tahoma;font-size: 12px;width: 120px"/>
<p:ajaxStatus style="width:16px;height:16px;">
<f:facet name="start">
<p:graphicImage value="/imagens/carregando.gif" />
</f:facet>
<f:facet name="complete">
<h:outputText value="#{mBProduto.info}" />
</f:facet>
</p:ajaxStatus>
</f:facet>
</h:panelGrid>
<p:outputPanel id="listaProdutosGrid" rendered="#{mBProduto.produtos.size() > 0}">
<p:dataGrid styleClass="ui-paginator-current"
id="listaProdutos" var="produto" value="#{mBProduto.produtos}"
columns="3" rows="9" paginator="true" effect="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="6,9">
<p:column>
<p:panel header="Código: #{produto.codigo}" style="text-align:center; font-family: Tahoma; font-size: 10px">
<h:panelGrid columns="3" style="width:100%">
<p:graphicImage value="#{mBProduto.imagem100x100}">
<f:param name="product_id" value="#{produto.codigo}"/>
</p:graphicImage>
<h:outputText value="#{produto.nome}" />
<p:commandLink title="Detalhes" oncomplete="produtoDialog.show()" update="produtoDetalhe">
<p:graphicImage value="/imagens/lupa.png"/>
<f:setPropertyActionListener value="#{produto}" target="#{mBProduto.prodSelecionado}" />
</p:commandLink>
</h:panelGrid>
</p:panel>
</p:column>
</p:dataGrid>
</p:outputPanel>
<p:outputPanel id="catalogo" rendered="#{mBProduto.produtos.size() == 0}">
<p:graphicImage value="/imagens/logoSuperB.png"/>
</p:outputPanel>
</h:panelGrid>
<p:dialog header="Detalhes do produto" widgetVar="produtoDialog" modal="true" width="620" height="620">
<p:outputPanel id="produtoDetalhe" style="text-align:center" layout="block">
<p:graphicImage value="#{mBProduto.imagem600x600}">
<f:param name="product_id" value="#{mBProduto.prodSelecionado.codigo}"/>
</p:graphicImage>
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel for="idSelecionado" value="Id: " />
<h:outputText id="idSelecionado" value="#{mBProduto.prodSelecionado.id}" />
<h:outputLabel for="descricaoSelecionada" value="Descrição: " />
<h:outputText id="descricaoSelecionada" value="#{mBProduto.prodSelecionado.nome}" />
</h:panelGrid>
</p:outputPanel>
</p:dialog>
<p:dialog header="Cadastro de email" widgetVar="cadastroEmailDialog" modal="true" width="505" height="200">
<p:outputPanel id="cadastroEmail" layout="block">
<p:growl id="growl" showDetail="true" life="7000" />
<h:panelGrid id="cadastroCliente" columns="2" columnClasses="coluna1, coluna2">
<h:outputLabel value="* Nome:" />
<p:inputText id="nome"
value="#{mBClientes.clienteInserir.nome}"
style="width: 400px"/>
<h:outputLabel value="* Email:" />
<p:inputText id="email"
value="#{mBClientes.clienteInserir.email}"
style="width: 400px"/>
<h:outputLabel value="* Cidade:" />
<p:autoComplete id="cidade"
value="#{mBClientes.clienteInserir.idcidade}"
completeMethod="#{mBClientes.completaCidade}"
var="cidade"
itemLabel="#{cidade.toString()}"
itemValue="#{cidade}"
converter="cidadeConverter"
style="width: 400px"/>
<f:facet name="footer">
<p:separator style="width:100%;height:1px; font-family: Tahoma; font-size: 12px" />
<p:commandButton value="Cadastrar meus dados"
action="#{mBClientes.inserir()}"
update="cadastroCliente,growl"
style="font-family: Tahoma;font-size: 12px;width: 100%"/>
</f:facet>
</h:panelGrid>
</p:outputPanel>
</p:dialog>
</h:form>
</h:body>
[/code]
Então meu querido…não consegui ver nada de errado não…
Unica coisa que eu sei é que o filtro funciona sim, eu e muitos tem usado com JSF + serlvet filter e funciona sem qualquer complicador…
Infelizmente sem depurar eu não consigo apontar o que esta acontecendo quando vc diz que o filtro não intercepta sua pagina.
Aconselho vc a procurar uma consultoria java mais perto…
Boa semana.
pois é cara, eu to usando o tomcat aqui, esqueci de mencionar antes, eu vou continuar fazendo mais alguns testes aqui, não sei realmente nem o que tentar mais…
como o projeto não é grande e ainda esta no inicio, eu acho q vou tentar criar um novo projeto e a primeira coisa q vou fazer nele é implementar um filter, pra ver se funciona, se der certo só mudo de projeto dai, pode ser algo q fiz errado nesse projeto q esteja causando isso…
eu tbem tenho certeza q funciona, pois se não funcionasse não haveria tantos tutoriais na net e exemplos disso… tanto usando filter quanto usando phaselistener…
no mais muito obrigado pela ajuda… e se conseguir fazer funcionar e descobrir o que é, eu volto a postar a solução aqui, vlw !!!
caramba, acabei de criar um projeto web aqui no netbeans, tah cruzinho da silva, as unicas coisas q fiz foram:
1- criar mais 2 paginas (pagina1.xhtml e pagina2.xhtml),
2- criar o pacote ‘controle’ e a classe de filtro dentro dele
3- criar o faces-config.xml e configurar as navegaçoes
4- configurar o filtro no web.xml utilizando o proprio Netbeans pra isso, fazendo com q ele mesmo gere o código
segue abaixo os arquivos que mechi
index.xhtml[code]<?xml version='1.0' encoding='UTF-8' ?>
Hello from Facelets [/code]pagina1.xhtml[code]<?xml version="1.0" encoding="UTF-8"?> Facelet Title Pagina 1 [/code]pagina2.xhtml[code]<?xml version="1.0" encoding="UTF-8"?> Facelet Title Pagina 2 [/code]faces-config.xml[code]<?xml version='1.0' encoding='UTF-8'?>
<navigation-rule>
<navigation-case>
<from-outcome>pagina1</from-outcome>
<to-view-id>/pagina1.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<navigation-case>
<from-outcome>pagina2</from-outcome>
<to-view-id>/pagina2.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<navigation-case>
<from-outcome>index</from-outcome>
<to-view-id>/index.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
[/code]web.xml<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<filter>
<filter-name>FiltrarRestricoes</filter-name>
<filter-class>controle.FiltrarRestricoes</filter-class>
</filter>
<filter-mapping>
<filter-name>FiltrarRestricoes</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
<security-constraint>
<display-name>Restrição1</display-name>
</security-constraint>
</web-app>
classe interceptadora[code]package controle;
import java.io.IOException;
import java.io.Serializable;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
/**
*
-
@author Cleiton
*/
public class FiltrarRestricoes implements Filter, Serializable {@Override
public void init(FilterConfig filterConfig) throws ServletException {
}@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String currentPage = req.getRequestURI();
System.out.println("currentPage: " + currentPage + “\n----------”);
chain.doFilter(request, response);
}@Override
public void destroy() {
}
}[/code]saida no console após executar, como vcs podem ver pelos System.out no console, a URL sempre está uma atrasada…[code]----------após executar o projeto----------
currentPage: /TesteLogin/
currentPage: /TesteLogin/faces/javax.faces.resource/jsf.js
----------após clicar no link para pagina1.xhtml----------
currentPage: /TesteLogin/faces/index.xhtml
currentPage: /TesteLogin/faces/javax.faces.resource/jsf.js
----------após clicar no link para index.xhtml----------
currentPage: /TesteLogin/faces/pagina1.xhtml
currentPage: /TesteLogin/faces/javax.faces.resource/jsf.js
----------após clicar no link para pagina2.xhtml----------
currentPage: /TesteLogin/faces/index.xhtml
currentPage: /TesteLogin/faces/javax.faces.resource/jsf.js
----------após clicar no link para index.xhtml----------
currentPage: /TesteLogin/faces/pagina2.xhtml
currentPage: /TesteLogin/faces/javax.faces.resource/jsf.js[/code]tah locu, será possível q só eu nesse brasil inteiro ja passou por isso? alguem tem idéia de alguma configuração que tenha ficado faltando ?
Ola Cleiton
Eu montei um ambiente de teste aqui e eu descobri o problema…realmente esta acontecendo oque vc falou por 2 motivos:
- JSF 1 tem o ciclo de vida JSP comum, quando vc faz um forward de uma navegação o filtro é disparado…mas no JSF 2 parece que mudou devido ao xhtml ou facelets nativos agora da especificação. Foi por isso que eu falei que funcionava…mas no JSF 2 não esta.
- JSF 2 tem um novo ciclo de vida (que eu ainda não sei o motivo) que não dispara o FORWARD quando vc navega…por isso o filtro não esta funcionando…eu ainda não sei exatamente mas vou procurar e resolver da melhor forma para vc.
- Para remediar seu problema vc pode declarar as navegações como REDIREC…colocando assim em todas as navegações:
<navigation-rule>
<navigation-case>
<from-outcome>pagina1</from-outcome>
<to-view-id>/pagina1.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
<navigation-rule>
<navigation-case>
<from-outcome>pagina2</from-outcome>
<to-view-id>/pagina2.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
<navigation-rule>
<navigation-case>
<from-outcome>index</from-outcome>
<to-view-id>/index.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
Isso vai resolver e tudo vai ficar funcionando sem problemas…unica situação é que isso não é indicado pq fazer o browser mandar um 301 requisitando a nova pagina…deixando sua aplicação relativamente mais lenda…
No resto vou procurar na especificação o motivo do POR QUE a forward interno do JSF 2 agora não disparar o filtro…
Depois eu posto ai…
pelo menos agora estamos em conformidade, kkkkk eu ja tinha visto sobre o , mas não quiz usar ele pelo motivo q vc ja sabe, e foi isso que me levou a utilizar aquele f:param pra setar na seção o nome da pagina q eu quero carregar, pra poder usar esse parametro na classe interceptadora, levando em consideração q é um simples parametro, não causaria lentidão na aplicação, o unico problema é q teria q setar um valor nele em cada link de cada pagina…
por enquanto a melhor solução q consegui pensar foi a utilização desse parametro, mas vou continuar dando mais uma pesquisada… qualquer coisa q achar volto a postar aqui tbem
obrigado cara t+
Então cleiton
Pelo que eu vi no JSF 2, na navegação não disparar o forward e por isso o filtro não intercepta pq ele não vai para outra pagina…o JSF 2 simplesmente consegue resolver a outra pagina internamente…desculpe ter falado que funcionava…pq no JSF 1.2 funciona sim… kkkkk Me desculpe.
É um caso de nova versão…
Vou procurar a resposta e como resolver da melhor forma…
que isso nem esquenta, é q eu tbem estou começando agora a trabalhar com web, então já comecei no JSF 2, mas nem me liguei nessa parada de versão tbem…
Então meu…tenho 11 anos de Java e 5 com JSF! Kkkk
Estou super intrigado com esse comportamento…pq acabei de ler na especificação…
Como eu falei…era para ele disparar…mas espera que vou descobrir…
então, acabei de ler umas parada interessante aqui…
http://java.dzone.com/articles/fluent-navigation-jsf-2
http://java.dzone.com/articles/fluent-navigation-jsf-2?page=0,1
Ainda não descobri o pq…estou nos foruns americanos…mas ninguem me falou o pq…só sei que no JSF 2 o ciclo de vida das paginas XHTML é resolvida pelo FACELETS e por isso o filtro não esta sendo invocado na hora de trocar a pagina…
Logo que eu resolver, eu posto aqui…
Bom ja descobri algo…
Se vc usar as paginas do seu projeto com JSP ao invés de XHTML vc vera que o filtro sera executado certinho…o problema é AS PÁGINAS XHTML SÃO EXECUTADAS VIA FACELETS NÃO DISPARANDO O FORWARD do container…isso é até bom , pq gasta bem menos tempo e recursos para gerar a resposta e envia a pagina para o navegador, mas em contra partida…abriu essa brecha de segurança usando Filtro.
Eu criei esse post aqui - http://www.guj.com.br/java/247653-nova-versao-do-jsf-2-nao-dispara-o-forward-na-navegacao-das-paginas-xhtml
vendo se alguem ajuda…
Eu ainda não descobri o porque…