Refresh de pagina em JSF

Boa Tarde a todos,
Bom eu estou com um problema aqui q para muitas de voces pode parecer besta, começei a estudar um pouco de JSF e fui fazer uns sisteminha basico aqui, fiz um sistema de login e senha para controle de programas, quando a pessoa faz o login ele é redireciona para uma lista de link’s (que são outras pagina xhtml) quando a pessoa clica em um link ela é redirecionada para a respectiva pagina, so que o problema é que quando eu clico no lnk ele muda a ural mais não muda o corpo da pagina, talvez seja algo relaciona com o ciclo de vida do JSF, não sei, mais se alguem souber como que:
Quando a pessoa clica no link, é aberto a pagina que a pessoa quer e não mudar a url apenas, antes que eu me esqueça o link ta assim:

<h:outputLink rel="band.xhtml" target="_blank" value="band.xhtml" >
			<h:outputText value="Band"/>
</h:outputLink>

Tambem tentei com o link HTML normal:

 <a href="/Controle/band.xhtml" target="_blank" >Band</a><br/>

Mais deu a mesma coisa, quam souber e quiser ajudar eu agradeço.

ja tentou fazer sem a propriedade target setada como blank?

Jovem,

Creio que você não está a utilizando o faces navigation. Dar uma olhada neste link http://www.jsftutorials.net/jsf-navigation-by-examples.html

Abs,

Sim, e mesmo porque eu acho q isso não faria diferença neh, pq ai ela so vai abrir mais uma pagina no browser.

é que não pensei no faces navigation hehe… desculpa!

valeu Kanin Dragon!

Kanin Dragon
Obrigado pelo link, mais eu dei uma lida no link tentei fazer a configuração e mesmo assim não rolou.

ficou assim, faces-config:

<navigation-rule> <from-view-id>/Controle/mainpage.xhtml</from-view-id> <navigation-case> <from-outcome>band</from-outcome> <to-view-id>/band.xhtml</to-view-id> </navigation-case>

e o link:

[code] <h:commandButton action=“band” value=“Band”/>

<br/>[/code]

teria como vc me dizer se eu errei em algo?

Jovem,

Aparentemente está correto, mas post o faces-config.xml.

Abs,

[code]<?xml version="1.0" encoding="UTF-8"?>

<lifecycle>
	<phase-listener>br.com.steno.phase.CicloDeVida</phase-listener>
</lifecycle>
<lifecycle>
	<phase-listener>br.com.steno.phase.LoginPhaseListener</phase-listener>
</lifecycle>
<navigation-rule>  
    <from-view-id>/Controle/mainpage.xhtml</from-view-id>  
    <navigation-case>  
        <from-outcome>band</from-outcome>  
        <to-view-id>/band.xhtml</to-view-id>  
    </navigation-case>
 </navigation-rule>

[/code]

Jovem,

  <to-view-id>/band.xhtml</to-view-id>  

O seu arquivo band.xhtml está na raiz do WebContent ?

Abs,

Sim

e esta linha:

<from-view-id>/Controle/mainpage.xhtml</from-view-id> 

eu ja mudei para

<from-view-id>/mainpage.xhtml</from-view-id> 

Jovem,

Ocorre algum erro quando clica no commandButton?

Abs,

Não, ele simplismente não joga para a pagina, eu clico no botão e ele não me responde nada,
no console eu recebo a mensagem:

Depois de: RESTORE_VIEW 1 Depois de: RESTORE_VIEW 1 Depois de: APPLY_REQUEST_VALUES 2 Depois de: APPLY_REQUEST_VALUES 2 Depois de: PROCESS_VALIDATIONS 3 Depois de: PROCESS_VALIDATIONS 3 Depois de: UPDATE_MODEL_VALUES 4 Depois de: UPDATE_MODEL_VALUES 4 Depois de: INVOKE_APPLICATION 5 Depois de: INVOKE_APPLICATION 5 Depois de: RENDER_RESPONSE 6 Depois de: RENDER_RESPONSE 6

Que foi um phaselistener q eu coloquei, não sei se isso te ajudaria em algo

Jovem,

Creio que seja por isso que não está conseguindo navegar. O seguinte faça o teste isolado sem o phase-listener.

abs,

Puts era isso mesmo,
mais ai eu caio em um problema na linha:

<lifecycle> <phase-listener>br.com.steno.phase.LoginPhaseListener</phase-listener> </lifecycle>

Eu uso um Phaselistener para realizar o login, e se eu retiro essa linha ele não fica declarado, ou seja, meu login não funciona, existe outra maneira de declarar o phase?

Jovem,

Esta achando muito estranho rsrs…

Da uma olha neste link http://rodrigolazoti.com.br/2008/09/01/filtrando-usuarios-logados-em-jsf-com-phaselistener/

Abs,

Kanin Dragon

Obrigado pelo link, isso foi mais ou menos oque eu fiz.

Oque eu gostaria de saber é como eu faço para ele redirecionar para a pagina que eu quero apos ele estar logado, pois quando eu logo e clico no botão ele não me deixa navegar, vo postar o codigo todo aqui talvez alguem ache algum erro.

Mainpage.xhtml:

<h:form>
		<h:commandButton value="Band" action="band?faces-redirect=true"/>
</h:form>[/code]

Login.xhtml
[code]
 <h:outputLabel value="Login" for="login"/>
    <h:inputText id="login" value="#{loginBean.usuario.login}"/>
    <br/>

	
	<h:outputLabel value="Senha" for="senha"/>
    <h:inputSecret id="senha" value="#{loginBean.usuario.senha}"/>
    <br/>
   <h:commandButton value="Entrar" action="#{loginBean.efetuaLogin}" />
[/code]
 
LoginBean
[code]
	public String efetuaLogin(){
		UsuarioDAO dao=new UsuarioDAO();
		boolean loginValido=dao.existe(this.usuario);
		if(loginValido==true){
			return "mainpage?faces-redirect=true";
		}else{
			return "login";
		}
	
	}
[/code]

LoginPhaseListener:
[code]package br.com.steno.phase;

import javax.faces.application.NavigationHandler;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpSession;

import br.com.steno.mb.LoginBean;

@SessionScoped

public class LoginPhaseListener implements PhaseListener {

	@Override
	public void afterPhase(PhaseEvent event) {
		// TODO Auto-generated method stub
		FacesContext context = event.getFacesContext();
		
		if("/login.xhtml".equals(context.getViewRoot().getViewId())){
			return;
		}
		LoginBean loginBean=context.getApplication().evaluateExpressionGet(context, "#{loginBean}", LoginBean.class);
		
		if(!loginBean.isUsuarioLogado()){
			NavigationHandler handler=context.getApplication().getNavigationHandler();
			handler.handleNavigation(context, null, "login");
			
			context.renderResponse();
		}
		
		
	}

	@Override
	public void beforePhase(PhaseEvent event) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public PhaseId getPhaseId() {
		// TODO Auto-generated method stub
		return PhaseId.RESTORE_VIEW;
	}

}

se você ou alguem conseguir indentificar o erro, estou aberto a sugestoes

provavelmente isso ja ta feito… mas como nao encontrei em nenhum lugar vou perguntar…

no seu faces-config.xml você tem uma navegação mapeada da login para a mainpage?

Nem porque se o usuario for autenticado ele ja joga pro mainpage…

if(loginValido==true){ return "mainpage?faces-redirect=true"; }else{ return "login"; }

De qualquerforma meu faces-config:

[code]

br.com.steno.phase.LoginPhaseListener
<lifecycle>
	<phase-listener>br.com.steno.phase.CicloDeVida</phase-listener>
</lifecycle>
[/code]

[quote]So, with the annotations and the implicit navigation, it is possible to write an application without needing a faces-config.xml, but there are still cases where the configuration file is needed.

For example, localization information such as the default and supported locales, or using any of the advanced features such as ELResolvers, PhaseListeners, or any artifact that can rely on the decorator pattern (such as application factories, Application, RenderKit, etc).
[/quote]

eu li aqui que aparentemente essa técnica de usar o “faces-redirect=true” não funciona se você usa PhaseListeners… então eu tentaria definir as navegações dentro do faces-config… caso não dê certo, valeu a tentativa hehe… o link que eu vi está aqui

http://blogs.oracle.com/rlubke/entry/faces_config_xml_we_don

Se entendi bem o problema, quando você navega tá sempre voltando pra pagina de login, é isso?
Me parece que o sistema nao esta mantendo a informacao de que o login foi feito com sucesso. Entao todo clique apos a primeira tela vai voltar pro form de login.

Seria isso?

Dá uma conferida no seu LoginBean, se ele esta SessionScoped e se a logica do isUsuarioLogado está correta.
(PS. alias, o PhaseListener nao precisa da anotacao de escopo)

Abraços