JSF - não executa <navigation-rule>

2 respostas
W

Pessoal, estou aprendendo JSF e tudo ia bem até eu chegar na parte de regras de navegação. Parece que não está sendo executado as tags <navigation-rule> do arquivo faces-config.xml, porém funciona normalmente o que está nas tags <managed-bean>.
Acontece o seguinte:
Tenho a pág. curso.jsp com 2 links onde cada um deve redirecionar para a pág. respectiva de acordo com a configuração das tags <navigation-rule>
[color=red]<h:commandLink value="Listar" action="listar"/>[/color] (deve ir para listarcursos.jsp)
[color=red]<h:commandLink value="Incluir" action="incluir"/>[/color] (deve ir para incluircurso.jsp)
digito o endereço [color=red]http://localhost:8080/.../curso.jsf[/color] e entra na pág. normalmente, mas ao clicar no link é carregada a própria página e não a definida no faces-config.xml.

Tenho uma outra página, incluircurso.jsp que é carregada normalmente e pela regra, se em uma inclusão ocorrer falha, deveria redirecionar para a pág. erro.jsp e se incluir com sucesso deveria ir para listarcursos.jsp. Mas isso não ocorre, parece que não entra nas tags <navigation-rule>, porém as tags <managed-bean> são executadas normalmente.
Agradeço desde já e espero que possam me ajudar a descobrir o que acontece, já olhei aqui no fórum, na documentação oficial, mas aparentemente está tudo certo.
Abaixo colocarei os códigos completos para que possam dar uma olhada.

Estou usando jsf-1_1_01

Obrigado.

faces-config.xml

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE faces-config PUBLIC
	"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
	"http://java.sun.com/dtd/web-facesconfig_1_1.dtd"&gt;
	
	&lt;faces-config&gt;
	
		&lt;managed-bean&gt;
			&lt;description&gt;
			&lt;/description&gt;
			&lt;managed-bean-name&gt;alunos&lt;/managed-bean-name&gt;
			&lt;managed-bean-class&gt;br.com.aplicacaoweb.classes.Alunos&lt;/managed-bean-class&gt;
			&lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;
		&lt;/managed-bean&gt;
		
		&lt;managed-bean&gt;
			&lt;description&gt;
			&lt;/description&gt;
			&lt;managed-bean-name&gt;AdminCursosDAO&lt;/managed-bean-name&gt;
			&lt;managed-bean-class&gt;br.com.aplicacaoweb.dao.AdminCursosDAO&lt;/managed-bean-class&gt;
			&lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;
		&lt;/managed-bean&gt;
				
		&lt;managed-bean&gt;
			&lt;description&gt;
			&lt;/description&gt;
			&lt;managed-bean-name&gt;curso&lt;/managed-bean-name&gt;
			&lt;managed-bean-class&gt;br.com.aplicacaoweb.classes.Curso&lt;/managed-bean-class&gt;
			&lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;
		&lt;/managed-bean&gt;
	
		&lt;navigation-rule&gt;
			&lt;from-view-id&gt;/curso.jsp&lt;/from-view-id&gt;
			&lt;navigation-case&gt;
				[color=red]&lt;from-outcome&gt;incluir&lt;/from-outcome&gt;[/color]
				&lt;to-view-id&gt;/incluircurso.jsp&lt;/to-view-id&gt;
			&lt;/navigation-case&gt;
			&lt;navigation-case&gt;
				[color=red]&lt;from-outcome&gt;listar&lt;/from-outcome&gt;[/color]
				&lt;to-view-id&gt;/listarcursos.jsp&lt;/to-view-id&gt;
			&lt;/navigation-case&gt;
		&lt;/navigation-rule&gt;
		
		&lt;navigation-rule&gt;
			&lt;from-view-id&gt;/incluircurso.jsp&lt;/from-view-id&gt;
			&lt;navigation-case&gt;
				[color=red]&lt;from-outcome&gt;sucesso&lt;/from-outcome&gt;[/color]
				&lt;to-view-id&gt;/listarcursos.jsp&lt;/to-view-id&gt;
			&lt;/navigation-case&gt;
			&lt;navigation-case&gt;
				[color=red]&lt;from-outcome&gt;falha&lt;/from-outcome&gt;[/color]
				&lt;to-view-id&gt;/erro.jsp&lt;/to-view-id&gt;
			&lt;/navigation-case&gt;
		&lt;/navigation-rule&gt;
				
	&lt;/faces-config&gt;

web.xml

&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;
  &lt;!DOCTYPE web-app PUBLIC
	"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
	"http://java.sun.com/dtd/web-app_2_3.dtd"&gt;

&lt;web-app&gt;
  &lt;display-name&gt;Struts Blank Application&lt;/display-name&gt;
  
  &lt;!-- Configuracao para JSF --&gt;
  &lt;context-param&gt;
  	&lt;param-name&gt;javax.faces.STATE_SAVING_METHOD&lt;/param-name&gt;
  	&lt;param-value&gt;client&lt;/param-value&gt;
  &lt;/context-param&gt;
  &lt;context-param&gt;
  	&lt;param-name&gt;javax.faces.CONFIG_FILES&lt;/param-name&gt;
  	&lt;param-value&gt;/WEB-INF/faces-config.xml&lt;/param-value&gt;
  &lt;/context-param&gt;
  
  &lt;listener&gt;
  	&lt;listener-class&gt;com.sun.faces.config.ConfigureListener&lt;/listener-class&gt;
  &lt;/listener&gt;
  
  &lt;!-- Faces Servlet --&gt;
  &lt;servlet&gt;
  	&lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
  	&lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;
  	&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
  &lt;/servlet&gt;
  
  &lt;!-- Standard Action Servlet Configuration --&gt;
  &lt;servlet&gt;
    &lt;servlet-name&gt;action&lt;/servlet-name&gt;
    &lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;
    &lt;init-param&gt;
      &lt;param-name&gt;config&lt;/param-name&gt;
      &lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;
    &lt;/init-param&gt;
    &lt;load-on-startup&gt;2&lt;/load-on-startup&gt;
 &lt;/servlet&gt;


  &lt;!-- Standard Action Servlet Mapping --&gt;
  &lt;servlet-mapping&gt;
    &lt;servlet-name&gt;action&lt;/servlet-name&gt;
    &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;
  &lt;/servlet-mapping&gt;
  
  &lt;!-- Faces Servlet Mapping --&gt;
  &lt;servlet-mapping&gt;
  	&lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
  	&lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;
  &lt;/servlet-mapping&gt;
  
  &lt;!-- The Usual Welcome File List --&gt;
  &lt;welcome-file-list&gt;
    &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
  &lt;/welcome-file-list&gt;

&lt;/web-app&gt;

curso.jsp Ao clicar nos links, deveria chamar as páginas configuradas no faces-config.xml, mas não acontece nada.

&lt;%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&gt;
&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %&gt;

&lt;html&gt;
	&lt;head&gt;
		&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
		&lt;title&gt;Insert title here&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;div align="center"&gt;
			&lt;f:view&gt;
				&lt;h:form&gt;
					&lt;table border="0"&gt;
						&lt;tr&gt;
							&lt;td align="center"&gt;
								Cadastro de Cursos
							&lt;/td&gt;
						&lt;/tr&gt;
						&lt;tr&gt;
							&lt;td align="center"&gt;
								&lt;h:commandLink value="Listar" action="listar"/&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
						&lt;tr&gt;
							&lt;td align="center"&gt;
								&lt;h:commandLink value="Incluir" action="incluir"/&gt;		
							&lt;/td&gt;
						&lt;/tr&gt;				
					&lt;/table&gt;
				&lt;/h:form&gt;
			&lt;/f:view&gt;
		&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt;

incluircurso.jsp Ao incluir com sucesso, deveria chamar a página listarcursos.jsp

&lt;%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&gt;
&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %&gt;

&lt;html&gt;
	&lt;head&gt;
		&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
		&lt;title&gt;Inclusão de curso&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;f:view&gt;
			&lt;h:form&gt;
				&lt;center&gt;&lt;h2&gt;Incluir novo curso&lt;/h2&gt;&lt;/center&gt;
				&lt;table align="center"&gt;
					&lt;tr&gt;
						&lt;td&gt;IdCurso:&lt;/td&gt;
						&lt;td&gt;&lt;h:inputText value="#{curso.idCurso}"&gt;&lt;/h:inputText&gt;
					&lt;/tr&gt;
					&lt;tr&gt;
						&lt;td&gt;Curso:&lt;/td&gt;
						&lt;td&gt;&lt;h:inputText value="#{curso.curso}"&gt;&lt;/h:inputText&gt;
					&lt;/tr&gt;
					&lt;tr&gt;
						&lt;td colspan="2" align="center"&gt;
							&lt;h:commandButton value="Incluir" action="#{curso.incluir}"&gt;&lt;/h:commandButton&gt;
						&lt;/td&gt;
					&lt;/tr&gt;
					&lt;tr&gt;
						&lt;td colspan="2"&gt;
							&lt;h:outputText id="resultado" value="#{curso.status}"&gt;&lt;/h:outputText&gt;
						&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/table&gt;					 
			&lt;/h:form&gt;
		&lt;/f:view&gt;
	&lt;/body&gt;
&lt;/html&gt;

Curso.java Possui os retornos "sucesso" ou "falha" para serem usados no <navigation-rule>

public class Curso {

	private int idCurso = 0;
	private String curso = "";
	private String status = "";
	
	public int getIdCurso() {
		return idCurso;
	}
	public void setIdCurso(int idCurso) {
		this.idCurso = idCurso;
	}
	public String getCurso() {
		return curso;
	}
	public void setCurso(String curso) {
		this.curso = curso;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}

	public  String incluir() throws SQLException{
		
		Connection cn = ConnectionFactory.getConnection();
		PreparedStatement pst = null;
		try{
			pst = cn.prepareStatement("insert into cursos (idCurso, curso) values(?,?)");
			pst.setInt(1, idCurso);
			pst.setString(2, curso);
			pst.executeUpdate();
			status = curso + " Incluído com sucesso!!!";
			return "sucesso";
		}catch(SQLException e){
			status = "Falha na inclusão: " + e.getMessage();
			return "falha";
		}
	}
}

2 Respostas

D

Qual a exception…o que o container te diz?

t+

W

Oi Diana, não dá nenhum erro, simplesmente não executa o que está definido no navigation-rules.
Eu acabei criando outro projeto exatamente igual e funcionou, mas não funciona no antigo, estranho.

Criado 23 de julho de 2008
Ultima resposta 25 de jul. de 2008
Respostas 2
Participantes 2