使用PrettyFaces的JSF资源(CSS,JS,图像)的漂亮URL

时间:2013-03-23 12:36:44

标签: jsf url-rewriting prettyfaces

我在Glassfish 3.1.2.2上运行了一个webapp,它使用JSF 2.1(Mojarra)和PrettyFaces 3.3.3来促进将“漂亮”的REST样式URL与我的应用程序集成的任务。

然而,看看生成的html代码,我看到了相当“丑陋”的长途径到我的应用程序资源。像这样:

<script type="text/javascript" src="/HelloWorld/faces/javax.faces.resource/js/jquery-1.9.1.min.js">

具体而言,faces/javax.faces.resource/部分会伤害我的眼睛。按照PrettyFaces的主要想法,我想删除这部分。

是否可以拦截这些URL的生成,并且PrettyFaces可以帮助我吗?

我正在使用<h:outputScript name="js/jquery-1.9.1.min.js" /><h:outputStylesheet name="css/app.css" /><h:graphicImage name="img/logo.png" />在我的JSF-Servlet中包含资源引用。

编辑:我想我必须做两件事?

  • 一:将/img/*之类的请求映射到其实际位置/faces/javax.faces.resource/img/*
  • 二:挂钩<h:graphicImage />元素(及其他)元素的URL生成。

如果你能给我一些关于从哪里开始的建议,我会很高兴的。我是JSF的新手。

非常感谢! :)

1 个答案:

答案 0 :(得分:2)

不幸的是,使用PrettyFaces实现这样的要求非常困难。这就是我们决定开始Rewrite的原因之一,这是PrettyFaces的继承者。

使用Rewrite很容易做到这样的事情。您只需添加一个连接规则,该规则将您希望看到的路径转换为您的应用程序当前使用的路径。

您的要求可以通过以下方式实施:

.addRule(Join.path("/js/{file}").to("/faces/javax.faces.resource/js/{file}"))
很容易,不是吗?如果您想了解有关重写的更多信息,请查看examples configurations。如果您有任何问题,请查看forums

重写2.0.0.Final,将很快发布,带来一些不错的增强功能。特别是PrettyFaces的向后兼容模块,如果你想用Rewrite替换PrettyFaces,你可以重用当前的PrettyFaces配置。