【问题标题】:JSF/Facelets : CSS file resource is not foundJSF/Facelets:未找到 CSS 文件资源
【发布时间】:2013-07-12 23:14:13
【问题描述】:

我正在尝试构建一个简单的 JSF 应用程序,但是当我使用下面的代码在 template/basic.xhtml 中添加 css 时,应用程序服务器(tomcat 7 和 glassfish 4)解析为 RES_NOT_FOUND

<h:head>
    <title><ui:insert name="title">Enrollment System</ui:insert></title>
    <h:outputStylesheet library="common" name="css/reset.css" />
    <h:outputStylesheet library="common" name="css/common.css" />
</h:head>

index.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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<ui:composition template="/templates/basic.xhtml">
    <ui:define name="content">
        <h1>Welcome, #{loginSession.privilege}</h1>
    </ui:define>
</ui:composition>
</html>

我已经阅读了另外几篇帖子以及 Mkyong's JSF tutorial 我应该将 css 放在某个特定目录中,但仍然无法使其工作。

以下是我的文件所在的位置:

enrollment/index.xhtml
enrollment/WEB-INF/templates/basic.xhtml
enrollment/resources/common/css/reset.css
enrollment/resources/common/css/common.css

是否缺少任何其他配置以使其正常工作?

这是我在堆栈中找到并返回空 ResourceInfo 的内容。

Daemon Thread [http-bio-80-exec-3] (Suspended)  
owns: SocketWrapper<E>  (id=62) 
ResourceManager.findResource(String, String, String, boolean, FacesContext) line: 190   
ResourceManager.findResource(String, String, String, FacesContext) line: 180    
ResourceHandlerImpl.createResource(String, String, String) line: 201    
ResourceHandlerImpl.createResource(String, String) line: 181    
StylesheetRenderer.encodeEnd(FacesContext, UIComponent) line: 97

getFromCache 将使用提供的四个参数在 HashMap 中搜索。

ResourceInfo info = getFromCache(resourceName, libraryName, localePrefix, contracts);

我检查了 HashMap 中的所有值,只有两个资源,即

"/"
"/WEB-INF/templates/basic.xhtml"

这可能是因为资源从未添加到 hashmap 的原因

【问题讨论】:

  • 请参阅stackoverflow.com/q/11988415/1065197 以更好地管理您的资源文件(CSS、JS 等)。
  • 除了模板文件是公开的和模板文件中不必要的doctype/html声明之外,我没有看到任何奇怪的东西。您是否使用自定义资源处理程序?无论如何,在 Mojarra 的 ResourceHandlerImpl#createResource() 上放置一个断点并从那里继续前进。
  • @LuiggiMendoza 感谢您对使用“库”属性的预期方式的建议。
  • @BalusC 我创建了一个新的动态 Web 项目,其中只有一个模板、一个 css 和不包含 bean 的 index.xhtml,但它也不起作用,我正在调试新创建的项目。这似乎不是项目特定的问题,如果我使用 eclipse 服务器插件自动发布应用程序有关系吗?
  • 右键,导出,WAR。然后用 ZIP 工具解压。文件在正确的位置吗?

标签: java css jsf


【解决方案1】:

我偶然解决了这个问题。

修复是在创建项目时不要选择“生成 web.xml 部署描述符”。

【讨论】:

  • 这不应该破坏事情。那么生成的/WEB-INF/web.xml 包含什么?
  • 通常包含的所有内容,面对 servlet 映射、过滤器、一些参数配置,但实际上我现在什至无法重现 RES_NOT_FOUND 错误...可能是一些损坏的项目配置。
  • 所以这不是这个问题的实际答案?
猜你喜欢
  • 2012-05-16
  • 2018-03-02
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
相关资源
最近更新 更多