【问题标题】:Creating a JSF URL without the windowid parameter创建不带 windowid 参数的 JSF URL
【发布时间】:2012-04-13 17:29:31
【问题描述】:

在我的 JSF 网络应用程序中,我想创建一个 URL 供用户添加书签或复制。这部分很简单,就像这样:

<h:link value="Permanent Link"
        outcome="/showStuff"> 
    <f:param name="recID" value="#{bean.recordID}" />
</h:link>

虽然该链接中包含所需的参数 (recID),但它也包含由 JSF Servlet 生成的 windowid 参数。有没有方便的方法来生成没有 windowid 参数的 URL?或者这有什么不同?

(这是Mojarra)

【问题讨论】:

  • JSF/Mojarra 不这样做。您不会对 CDI 或任何 CDI 扩展感到困惑吗?例如。 @WindowScoped 什么的?
  • @BalusC 我正在使用 Apache MyFaces CODI 来实现 ViewAccessScoped。这是对我做的吗?
  • 很有可能。标准 CDI @ConversationScoped 也通过添加 cid 请求参数来做到这一点。它还应该如何在单个对话中跟踪多个视图?我认为您需要在 CODI 文档中查找如何关闭在&lt;h:link&gt; 中附加窗口 ID。如果徒劳,我认为你最好的选择是使用普通的&lt;a&gt;
  • 您可以通过 CODI 配置禁用此参数。见stackoverflow.com/a/14997570/1535995

标签: jsf-2 cdi codi


【解决方案1】:

您可以使用 URLRewriteFilter 框架删除 WindowId,例如 OCPsoft Rewrite URLRewriteFilter

使用单个配置规则执行此类操作应该相当简单。如果这条规则太严格或太笼统,你显然可以摆弄。

.defineRule()
.when(Direction.isOutbound().and(
        URL.matches("{prefix}{windowId}{suffix}")
         .where("windowId").matches("windowId=[^&]+")))
.perform(Substitute.with("{prefix}{suffix}"))

查看重写站点。这很容易设置。 http://ocpsoft.org/rewrite/

【讨论】:

  • 忍不住要评论说这个答案的作者也是相关框架的作者——我绝对可以推荐 :-)
  • 嘿。仅仅因为您编写了一个框架并没有任何理由反对您!这看起来很有趣,但对我的需求来说太过分了。我可以在我的 bean 中编写一个方法,根据从 FacesContext 中提取的部分、一些常量和一个变量来生成 URL。尽管如此,我还是会使用 Rewrite 方法,因为它看起来对以后更复杂的情况很有用。
  • 是的,你也可以这样做。我想这种方法对于当你想在许多页面上执行此操作而不更改应用程序代码时很有用:)
  • 附言。让我知道事情的后续!我和其他开发人员很乐意帮助您解决论坛上的任何问题:ocpsoft.org/support
  • @Sasa7812 给出了正确的答案。使用第二个框架,因为你忽略了第一个框架的配置是无稽之谈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多