我也有使用方法getAllArticles()的ArticlesService.如何创建具有有意义名称的链接列表(由#{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中实现相同的功能?
如果这是对现有应用程序的改进,那么您基本上需要一个检测“脏”和“友好”URL的Filter
.当它检测到“脏”URL时,它应该在
HttpServletResponse#sendRedirect()
之前将请求重定向到“友好”URL.当它检测到“友好”URL时,它应该在
RequestDispatcher#forward()
之前将请求转发到“脏”URL.示例可以在这个相关问题中找到:
How to use a servlet filter in Java to change an incoming servlet request url?
此外,您还需要一个自定义ViewHandler
来为JSF< h:form>,< h:link>等生成所需的“友好”URL.可以在此处找到示例:Dynamic Directory in Java EE Web Application.
如果这是一个新的应用程序或可以更改的应用程序,您可以考虑任何现有的漂亮URL库而不是重新发明轮子:
> PrettyFaces,这是一个完整的URL重写解决方案.它需要一个额外的XML配置文件pretty-config.xml.如果要完全更改URL和/或要配置从旧URL到新URL的重定向,则此库非常有用.
> FacesViews FacesViews库,它通过单个web.xml上下文参数使现有URL无扩展.它还支持“MultiViews”,从而可以在托管bean中以声明方式注入路径参数.例如. / foo / bar / baz可以指向/foo.xhtml,值bar和baz可以通过@Param(pathIndex)注入.
还有Mojarra Scales库的实验PrettyUrlPhaseListener,但它是一个旧库,而PrettyFaces主要基于它,所以它不值得努力.