Java 修复重写URL时脚本/css的相对路径

Java 修复重写URL时脚本/css的相对路径,java,jsf-2,url-rewriting,prettyfaces,Java,Jsf 2,Url Rewriting,Prettyfaces,我正在JBoss AS 6.1.0.Final中使用JSF2.1和RichFaces4.1。现在,我专注于重写URL。在尝试了不同的方法后,我决定坚持使用PrettyFaces,因为它使用起来非常直观(并且在几分钟内就可以使用) 有一个棘手的问题。脚本/css的相对链接被弄乱了,因为URL发生了变化,相对路径以404结束。我可以使用绝对路径,但这会迫使我更改许多页面,并在页面的源代码中公开应用程序的结构 我正在考虑一种暂时的解决方法:让支持bean负责管理这些相对链接的不同级别,但重用bean会

我正在JBoss AS 6.1.0.Final中使用JSF2.1和RichFaces4.1。现在,我专注于重写URL。在尝试了不同的方法后,我决定坚持使用PrettyFaces,因为它使用起来非常直观(并且在几分钟内就可以使用)

有一个棘手的问题。脚本/css的相对链接被弄乱了,因为URL发生了变化,相对路径以404结束。我可以使用绝对路径,但这会迫使我更改许多页面,并在页面的源代码中公开应用程序的结构

我正在考虑一种暂时的解决方法:让支持bean负责管理这些相对链接的不同级别,但重用bean会使这成为一件微妙的事情

我的问题是,在重写URL时,是否有明确的方法或最佳实践来管理这些相对路径

编辑

h:outputStylesheet和h:outputScript工作得非常出色。剩下的就是解决CSS以相对方式引用图像的一个小问题。以这种结构为例:

-------/resources
       |
       ---_img
       |
       ---_css
       |
       ---_js
文件夹
\u CSS
中的CSS文件引用位于
\u img
文件夹中的图像
image1.png
,相对路径为
。/\u img/image1.png
。问题是,这最终会出现在404中,因为它在
/myApp/javax.faces.resource/\u img/image1.png
中找不到图像


在CSS中为
{request.contextPath}/resources
更改每个
。/
,似乎效果不错,但我想知道是否有更好的方法。相对路径方法不起作用对我来说似乎很奇怪。

首先,我不明白它们究竟是如何以及为什么会搞砸的。你不清楚。很可能您出于某种原因硬编码了纯HTML
(和
)元素,而不是使用JSF提供的和(和)组件。这些JSF组件可以采用与
/resources
文件夹相关的资源名称,它们将自动为上下文路径添加前缀,使其最终位于域相对URL(带前导斜杠)中,而不是请求相对URL(不带前导斜杠)

给定以下文件夹结构(预定义了
/resources
文件夹名称;不能更改其名称):

WebContent
|--资源
||--css
||`--style.css
||--img
||`--logo.png
|`--js
|`--script.js
|--page.xhtml
:
然后,您应该能够让JSF自动生成适当的
(和
)元素,如下所示:


另见:
  • -第2.6章资源处理

您需要为CSS文件使用绝对URL,例如:

/path/to/style.css
而不是:

../style.css
如果可以的话,您还希望避免硬编码URL,并使用JSF2资源重新定位功能:

以下是一些可能有帮助的链接:


确实有点奇怪,但当你提到“硬编码”这个词时,我脸红了。我记得我们的母版页是由设计团队设计为普通html的,我们必须将其调整为xhtml并重新标记其中的许多部分。猜猜看,链接和css确实是硬编码的。我会马上改变这一点,并对结果进行评论。该死,被打败一两分钟:出于某种原因,用JSF组件替换pIf不是一个选项,然后确保在引用JS/CSS/image资源的HTML元素中使用域相关URL(以斜杠开头)。您可以使用
{request.contextPath}
动态打印上下文路径。例如
等等。然而,对每一个JS/CSS/image资源重复它是很难看的:)@BalusC确实是:D。你的解决方案工作得很有魅力!现在我只对CSS引用的图像有一个问题,导致404。我用一些细节更新了我的问题。使用
{resource}
表达式。另请参阅,谢谢您的回答!顺便说一句,漂亮脸蛋干得不错。直观、易于入门、易于使用。坚持下去!:)非常感谢。我很高兴你喜欢它。我们正试图继续改进它(作为4.0版的核心:)