JSP e JSF na mesma aplicação.[RESOLVIDO]

8 respostas
I

Galera,

Vou reescrever uma aplicação, mas isso ocorrerá de forma gradual, de forma que terei que manter jsf e jsp em conjunto.

Alguém sabe como mapear o web.xml para isso?

Fiz um mapeamento, segue abaixo, que funciona apenas as jsps, as xhtml nao funcionam, alguém sabe como fazer isso?

Agradeço desde já.

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.jsp</param-value>
  </context-param>

  <!-- Facelets pages will use the .xhtml extension -->
  <context-param>
    <param-name>facelets.VIEW_MAPPINGS</param-name>
    <param-value>*.jsf</param-value>
  </context-param>     

  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  </servlet>
 
  <!-- Use prefix mapping for Facelets pages, e.g. http://localhost:8080/webapp/faces/mypage.xhtml -->
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>

8 Respostas

H

Como você está chamando a pagina xhtml?

G

http://wiki.java.net/twiki/bin/view/Projects/FaceletsFAQ#How_do_I_use_Facelets_and_JSP_in

I

Então, tenho uma index.html que redireciona para uma inclusao.xthml, mas no redirecionamento uso inclusao.jsf.
O retorno é que o recurso não existe.
O código que usei é justamente o que encontrei no site indicao acima pelo gambazinho.

H

Cara, eu não vi lá o link.

Mas quando você redireciona, você está adicionando o faces? /faces/*

I

Tentei de duas formas, na primeira:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>Educor</display-name>

  <context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.jsp</param-value>
  </context-param>

  <!-- Facelets pages will use the .xhtml extension -->
  <context-param>
    <param-name>javax.faces.FACELETS_VIEW_MAPPINGS</param-name>
    <param-value>*.xhtml</param-value>
  </context-param>     

  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  </servlet>
 
  <!-- Use prefix mapping for Facelets pages, e.g. http://localhost:8080/webapp/faces/mypage.xhtml -->
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>

index.html

<html>
	<head>
		<meta http-equiv="refresh" content="0; url=http://localhost:8080/Educor/faces/inclusao.xhtml">
	</head>
</html>

inclusao.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ice="http://www.icesoft.com/icefaces/component">

<h:head>

<link rel="StyleSheet" type="text/css" href="css/estilos.css" media="screen" />
</h:head>
<h:body>
<h:form>
	<h:outputText id="teste" value="#{testeBean.nome}"></h:outputText>
	<h:commandButton value="teste" action="#{testeBean.teste}" />
	
</h:form>
</h:body>
</html>

E o erro que dá é o seguinte:

31/05/2012 10:20:22 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/Educor] threw exception
com.sun.faces.context.FacesFileNotFoundException: /inclusao.xhtml Not Found in ExternalContext as a Resource
	at com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:232)
	at com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:273)
	at com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:209)
	at com.sun.faces.application.view.ViewMetadataImpl.createMetadataView(ViewMetadataImpl.java:114)
	at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:233)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

Caso eu altere na index.html para redirecionar para inclusao.jsf aí o erro é outro:

HTTP Status 404 - /Educor/inclusao.jsf

--------------------------------------------------------------------------------

type Status report

message /Educor/inclusao.jsf

description The requested resource (/Educor/inclusao.jsf) is not available.

A página inclusao.xhtml está no diretório faces.

Alguma idéia do que possa ser?

Abraços

H

Você fez o teste como eu falei? Não adianta o arquivo está no diretório faces, ele não irá mapear.

você declarou com /faces/ na url, é assim que você deve chamar.

I

Sim, coloquei sim, olha lá em cima no web.xml a declaração e no redirect da index.html também, não faço a mínima idéia do que seja, mas mudou uma coisa aqui, se eu tirar só o mapeamento da JSP

<context-param>   
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>   
    <param-value>.jsp</param-value>   
  </context-param>

aí tudo funciona normalmente.

I

Galera,

Resolvi, ficou assim o código do meu web.xml:

<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>*.jsf</url-pattern>
	</servlet-mapping>

	<context-param>
		<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
		<param-value>.jsp .xhtml</param-value>
	</context-param>

Era só adicionar o .jsp .xhtml (com espaço em branco mesmo) entre os dois sufixos, para ele adicionar os sufixos quando direcionar.

Descobri aqui:
http://myfaces.apache.org/core20/myfaces-impl/webconfig.html

Fica aí a solução para quem precisar.

Abraços e obrigado a todos que colaboraram.

Criado 30 de maio de 2012
Ultima resposta 31 de mai. de 2012
Respostas 8
Participantes 3