9

例如,我有带有方法的类 ArticlegetTitle ()getContent ().

我也有带有方法的 ArticlesService getAllArticles ()。如何创建具有有意义名称的链接列表(由 组成#{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 页面。

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

4

2 回答 2

13

如果这是为了改进现有应用程序,那么您基本上需要一个Filter检测“脏”和“友好”URL 的工具。当它检测到一个“脏”的 URL 时,它应该将请求重定向到一个“友好”的 URL HttpServletResponse#sendRedirect()。当它检测到一个“友好”的 URL 时,它应该将请求转发到“脏”的 URL RequestDispatcher#forward()。可以在这个相关问题中找到一个示例:How to use a servlet filter in Java to change an incoming servlet request url?

此外,您还需要一个自定义来为 JSF等ViewHandler生成所需的“友好”URL 。可以在此处找到一个示例:Java EE Web 应用程序中的动态目录<h:form><h:link>

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

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

还有Mojarra Scales库的实验性PrettyUrlPhaseListener,但它是一个旧库,PrettyFaces 主要基于它,因此不值得努力。

于 2009-12-17T11:53:21.153 回答
8

你试过PrettyFaces吗?

简单、有效、书签、JSF

PrettyFaces 是 JSF1.2 和 JSF2.0 的开源扩展,它支持创建可书签的漂亮 URL。PrettyFaces 优雅地解决了这个问题,包括以下特性:页面加载操作、与面部导航的无缝集成、动态 view-id 分配、托管参数解析以及与其他 JSF 框架的无配置兼容性。

SEO和一致性:

Any business knows how important Search Engine Optimization can be for sales. PrettyFaces allows SEO-friendly URLs, and improved customer experience. Give your site a uniform, well understood feeling, from the address bar to the buy button.

于 2009-12-17T11:55:41.027 回答