一尘不染

如何在jsf中创建用户友好和seo友好的URL?

jsp

例如,我有带有方法getTitle ()和的Article类getContent ()

我也有带有method的ArticlesServicegetAllArticles()。如何创建具有有意义名称的链接列表(由组成#{article.title})?喜欢:

http://mysiteaddress.com/article/first-article-title
http://mysiteaddress.com/article/how-to-make-links-in-jsf

..或类似的东西。

我可以使用来创建具有所有必要功能的链接<h:commandLink>,但是我不知道如何为此做一个很好的“ href”:它总是带有href’#’。

我可以使用它创建漂亮的链接,<h:outputLink>但是我不知道如何向其中添加必要的功能。


在jsp中,我创建了自己的前端控制器,该控制器解析请求中的url,然后执行重定向到相应的jsp-page。

如何在JSF中实现相同的功能?


阅读 279

收藏
2020-06-08

共1个答案

一尘不染

如果这是对现有应用程序的改进,那么您基本上需要一个Filter可检测“肮脏”和“友好”
URL的。当它检测到“脏” URL时,则应通过 请求 重定向 到“友好” URL
HttpServletResponse#sendRedirect()。当它检测到“友好”
URL时,则应通过将请求 转发 到“脏” URL
RequestDispatcher#forward()。在以下相关问题中可以找到一个示例:如何在Java中使用servlet过滤器来更改传入的servlet请求url?

此外,你还需要一个定制ViewHandler生产的JSF所期望的“友好”的URL
<h:form><h:link>等一个例子可以在这里找到:在J2EEWeb应用程序动态目录。

如果这是一个新应用程序,或者是一个随时可以更改的应用程序,则可以考虑使用任何现有的漂亮URL库,而不必重新发明轮子:

  • PrettyFaces,这是一个完整的URL重写解决方案。它需要一个附加的XML配置文件pretty-config.xml。如果您要完全更改URL和/或配置从旧URL到新URL的重定向,则此库很有用。
  • OmniFaces库的FacesViews,使现有URL 不受单个web.xml上下文参数的扩展。它还支持“ MultiViews”,从而可以声明性地将路径参数注入托管bean中。例如/foo/bar/baz可以指向/foo.xhtml和值,barbaz可以通过注入@Param(pathIndex)

还有实验PrettyUrlPhaseListener钻嘴鱼科秤库,但它是一个古老的图书馆和PrettyFaces主要是基于它,所以它是不值得的努力。

2020-06-08