[i]Caros amigos,
estou inicializando meus estudos em JSF. Criei uma aplicação-exemplo retirada do livro Core JSF, porém deparei-me com um erro: a aplicação roda corretamente no Eclipse Galileo (apesar de apresentar um erro na linha 5 do meu index.jsp - “Resource bundle com.corejsf.messages cannot be found on classpath”). Contudo, quando a exporto para a pasta webapps do tomcat, no formato .war, a aplicação apresenta o seguinte erro ao ser executada:[/i]
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 4
<html>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
<f:loadBundle basename="com.corejsf.messages" var="msgs"/>
<head>
<link href="styles.css" rel="stylesheet" type="text/css"/>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
java.lang.RuntimeException: Cannot find FacesContext
javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:1855)
javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1672)
org.apache.jsp.index_jsp._jspx_meth_f_005fview_005f0(index_jsp.java:104)
org.apache.jsp.index_jsp._jspService(index_jsp.java:79)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.
Apache Tomcat/6.0.20
Esse é o meu faces-config.xml:
<?xml version="1.0"?>
<faces-config 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-facesconfig_1_2.xsd"
version="1.2">
<application>
<resource-bundle>
<base-name>com.corejsf.messages</base-name>
<var>msgs</var>
</resource-bundle>
</application>
<application>
<locale-config>
<default-locale>pt_BR</default-locale>
<supported-locale>en_US</supported-locale>
</locale-config>
</application>
<managed-bean>
<managed-bean-name>tableData</managed-bean-name>
<managed-bean-class>com.corejsf.TableData</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
Index.jsp
<html>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
<f:loadBundle basename="com.corejsf.messages" var="msgs"/>
<head>
<link href="styles.css" rel="stylesheet" type="text/css"/>
<title>
<h:outputText value="#{msgs.windowTitle}"/>
</title>
</head>
<body>
<h:form>
<h:dataTable value="#{tableData.names}"
var="name"
captionStyle="font-size: 0.95em; font-style:italic"
style="width: 250px;">
<f:facet name="caption">
<h:outputText value="#{msgs.listing}"/>
</f:facet>
<h:column headerClass="columnHeader"
footerClass="columnFooter">
<f:facet name="header">
<h:outputText value="#{msgs.lastnameColumn}"/>
</f:facet>
<h:outputText value="#{name.last}"/>
<f:facet name="footer">
<h:outputText value="#{msgs.alphanumeric}"/>
</f:facet>
</h:column>
<h:column headerClass="columnHeader"
footerClass="columnFooter">
<f:facet name="header">
<h:outputText value="#{msgs.firstnameColumn}"/>
</f:facet>
<h:outputText value="#{name.first}"/>
<f:facet name="footer">
<h:outputText value="#{msgs.alphanumeric}"/>
</f:facet>
</h:column>
</h:dataTable>
</h:form>
</body>
</f:view>
</html>
O web.xml foi gerado automaticamente pelo eclipse:
<?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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>05b_headersAndFooters</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<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>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
</web-app>
Ao iniciar meu projeto criei um “dynamic web project” e minha estrutura de diretórios está assim:
Java Resources: src
—com.corejsf
--------TableData.java
--------Name.java
--------messages_pt_BR.properties
--------messages_en_US.properties
--------Libraries
WebContent
—WEB-INF
--------faces-config.xml
--------web.xml
—index.jsp
—styles.css
Ao mudar o linha o atributo basename da tag loadBundle do index.jsp para
“com.corejsf.messages_pt_BR”
o aviso de erro desaparece do eclipse, mas a aplicação continua não rodando ao ser acessada pelo Tomcat Manager.
Desde já agradeço a atenção!