【问题标题】:The required resource (jsp) is not available when accessing a .jsf访问 .jsf 时所需资源 (jsp) 不可用
【发布时间】:2012-05-07 13:48:33
【问题描述】:

我是 JSF 的新手,所以不要以为这不是什么愚蠢的错误。

我正在将我的 web 应用程序从 Eclipse Indigo 部署到 JBoss 6.1。我可以检查 webapp 是否部署在服务器中,因为静态 index.html 文件可以正常工作(并且其中的更改通过 Web 浏览器反映)。

我在 pages/NewRequest.jsf 中有一个 JSF2 Facelet,它的逻辑很少(实际上它是纯 XHTML):

<!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"
  xmlns:f="http://java.sun.com/jsf/core">
<h:body>
Hola mundo again....
</h:body>
</html>

我的 web.xml 如下(我检查了 FaceServlet 是否已配置)

<?xml version="1.0"?>
<web-app version="3.0" 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-app_3_0.xsd">
<display-name>GesMan</display-name>
<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>
<servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>/faces/*</url-pattern>
 </servlet-mapping>
<welcome-file-list>
  <welcome-file>index.html</welcome-file>
  <welcome-file>NewRequest.jsf</welcome-file>
</welcome-file-list>
</web-app>

这一切对我来说都是合法的,但是当我尝试访问 JSF 时,我只得到一个 404 错误页面,告诉我一个与我的 JSP 同名的 JSP 不存在。控制台和 server.log 文件中均未显示错误

你能告诉我我做错了什么,或者我怎样才能得到更具体的错误信息?

【问题讨论】:

    标签: jsf-2 jboss


    【解决方案1】:

    实际视图文件的文件扩展名应该代表使用的视图技术(例如.xhtml.jsp),而不是JSF映射(例如.jsf)。你应该有一个pages/NewRequest.xhtml,而不是pages/NewRequest.jsf

    您的另一个问题是欢迎文件不能代表映射(虚拟)文件名,但必须代表实际文件名。所以你需要NewRequest.xhtml。但这反过来又要求您将 FacesServlet 映射到该 URL 模式。

    所以,总而言之,只需将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>*.xhtml</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
      <welcome-file>NewRequest.xhtml</welcome-file>
    </welcome-file-list>
    

    这样您就可以继续在 URL 中使用 .xhtml 而无需摆弄虚拟 URL。

    【讨论】:

    • 好的,这是 .xhtml 问题。我查看了(Eclipse 生成的)web.xml 文件,并假设映射意味着我必须这样命名我的文件(欢迎文件中的更改只是一个试验)。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2023-03-10
    • 2012-03-19
    • 2014-02-28
    • 1970-01-01
    相关资源
    最近更新 更多