【问题标题】:JSF URLs rewritingJSF URL 重写
【发布时间】:2018-10-23 13:02:09
【问题描述】:

我尝试在我的 JSF 应用程序中使用“重写”(http://ocpsoft.org/rewrite/)。

一切都很好,我已经创建了规则:

.addRule(Join.path("/profile/{pagename}-{id}/").to("/profile/{pagename}.xhtml?id={id}"))

一切正常,例如,当我转到 /profile/viewpoll-101/ 时,我看到正确的页面,其中 id = 101 的投票。所以,现在我想在 h:link jsf 元素中获取用户友好的链接.我正在尝试这个:

<h:link outcome="/profile/viewpoll-#{poll.id}/">
    #{poll.title}
</h:link>

但链接无效...

那么,如何在 h:link 中获得用户友好的链接?

谢谢!

【问题讨论】:

    标签: jsf url-rewriting


    【解决方案1】:

    没有办法使用重写,只能使用 Prettyfaces。使用 rewrite 你必须指定 JSF 标识符。

    PrettyFaces 附带一个特殊的 JSF 组件,可以简化创建映射 URL 的链接。然而 JSF 2.0 引入了 h:link,它可以很好地创建这样的链接。 Rewrite 不包含任何特殊的 JSF 组件。推荐使用标准的 JSF 组件来渲染链接。

    使用 h:link 创建指向重写 URL 的链接非常简单。只需使用您配置为结果的加入部分的 URL。如果 URL 包含参数,请使用 f:param 设置它们的值。

    <h:link outcome="/customer-details.jsf">
      <f:param name="id" value="123"/>
      Show details
    </h:link>
    

    JSF 2 中,通过隐式导航,您可以使用它来访问 /customer-details.jsp/customer-details.xhtml

    <h:link outcome="/customer-details">
      <f:param name="id" value="123"/>
      Show details
    </h:link>
    

    另请参阅:

    【讨论】:

    • 但是我没有通过 PrettyFaces 映射这个 url。我通过重写(ocpsoft.org/rewrite/examples)映射此网址
    • 我刚刚注意到了 ;-) 根据文档更新了我的答案。
    • 如果资源名称需要是“customer-details-123”那么customer-details.xhtml?id=123 并不是很令人满意。您正在使用规则重写的页面的知识,这可能有效但并不好。我认为这是 Rewrite/PrettyFaces 中的一个错误。它应该验证结果中使用的资源名称(JSF 为此调用了各种插件,PrettyFaces 应该是其中之一)
    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 2017-02-02
    • 2012-04-11
    • 1970-01-01
    • 2013-06-26
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多