我在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的新手。
非常感谢! :)
答案 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配置。