Bom dia pessoal,
Estou tendo um problema ao publicar uma aplicação que utliliza JSF. O problema que aparentemente nenhum redirect funciona no servidor, ao clicar em um commandlink ou commandbutton que faça um redirect, a página simplemente faz um reload.
Alguém tem idéia do que poderia ser? Em ambiente local tudo funciona.
Obrigado desde já.
estranho… :S
Como você ta fazendo o redirecionamento?
Da pra postar o codigo de um return que você testou e não funcionou?
aqui o método que eu chamo para editar um registro
public void edit(Register r){
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("register", r);
FacesContext.getCurrentInstance().getExternalContext().redirect("/dominio/users/register/register.xhtml");
}
A tela da um refresh mas não é redirecionada para register.xhtml
Fiz uns testes para tentar identificar o problema e aparentemente é o próprio servidor que está barrando os redirects. Segue abaixo o teste realizado:
Estrutura
index.xhtml
teste/
-------pag2.xhtml
index.html
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<h:commandLink action="${teste.redirecionar}" value="Clique" />
</h:form>
</h:body>
</html>
teste/pag2.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<h:commandLink action="${teste.redirecionar2}" value="Voltar" />
</h:form>
</h:body>
</html>
ManagedBean Teste
@Named
@RequestScoped
public class Teste {
public void redirecionar() {
try {
FacesContext.getCurrentInstance().getExternalContext().redirect("/Teste-1.0-SNAPSHOT/teste/pag2.xhtml");
} catch (IOException ex) {
Logger.getLogger(Teste.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void redirecionar2() {
try {
FacesContext.getCurrentInstance().getExternalContext().redirect("/Teste-1.0-SNAPSHOT/index.xhtml");
} catch (IOException ex) {
Logger.getLogger(Teste.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Por favor, alguém já passou por isto? Local os redirects funcionam normalmente. Cheguei a conclusão de ser algo no servidor, pois baixei a pasta do JBoss deles pra minha máquina e funcionou também.
Alguém tem idéia do que pode estar impedindo os redirects?
Obrigado
Cara eu faço redirecionamento com o retorno da função,
assim:
public String redirecionar() {
return("/Teste-1.0-SNAPSHOT/teste/pag2.xhtml?faces-redirect=true");
}
e nunca tive esse problema… =(
tentei desta forma também e não funcionou.
também num é falta dos “()” na camada da função?
tipo
<h:commandLink action="#{teste.redirecionar()}" value="Clique" />
Quando tento redirecionar retornando a String me dá este erro
Unable to find matching navigation case with from-view-id '/index.xhtml' for action '${teste.redirecionar}' with outcome '/Teste-1.0-SNAPSHOT/teste/pag2.xhtml?faces-redirect=true'
Adicionando os parenteses na chamada também dá o mesmo erro.
Entrei em contato com o suporte da Integrator e o problema era na configuração do protocolo AJP/1.3 do JBoss.
As formas de redirects estão normais agora sem fazer nenhuma alteração no código.
Obrigado a todos