如何在JSF中创建用户友好和SEO友好的URL?

9
例如,我有一个名为 Article 的类,其中包含方法 getTitle()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中实现相同的功能?

2个回答

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

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

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

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

还有Mojarra Scales库的实验性PrettyUrlPhaseListener,但它是一个旧的库,而且PrettyFaces在很大程度上基于它,所以不值得花费精力。


如果我没有友好的URL,而是像StackOverflow一样将所有帖子都存储在数据库中,那么如何在JSF中创建URL呢? - Navdeep Singh
使用prettyfaces时,性能和往返次数如何? - pipalia
1
@pipalia 量化即是认知。 - BalusC
@BalusC 只是问一下,因为我们完全放弃了 JSF,原因是由于这种性能和其他众所周知的问题与这种严格的架构有关。 - pipalia

8

你试过PrettyFaces吗?

简单、有效、书签、JSF

SEO和一致性:

任何企业都知道搜索引擎优化对销售的重要性。PrettyFaces可以提供SEO友好的URL,并改善客户体验。使你的网站从地址栏到购买按钮具有统一且易于理解的感觉。


我尝试过了,但对我没有用... 我在NetBeans 7.3中创建了一个新项目,然后将PF 3.3.3 jar文件添加到库中,并编辑web.xml并添加PF xml(config)... 但只有PF config的映射起作用。 - Jaider
没关系,我现在使用 OmniFaces(遇到了类似的问题),但是我通过将阶段从 Development 更改为 Production 来解决了问题。 - Jaider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接