【问题标题】:How to disable jftfdi jffi query params in JSF如何在 JSF 中禁用 jftfdi jffi 查询参数
【发布时间】:2013-10-08 18:21:51
【问题描述】:

我尝试了最新版本的 JavaServer Faces 2.2 (Mojarra 2.2.4) 并注意到以这种不需要的方式更改了我的查询字符串:

page.jsf?jftfdi=&jffi=

而不是

page.jsf

我发现它是 JSF 2.2 的新特性。但是这些查询参数(jftfdi,jffi)破坏了我对 SEO 友好的 url。如何禁用它?

【问题讨论】:

标签: jsf mojarra jsf-2.2 http-request-parameters flow-scope


【解决方案1】:

这是 Mojarra 中的一个错误。当没有任何流导航配置的方法时,它们不应该被附加 (by the new @FlowScoped annotation and <j:flow-xxx> tags)。

基本上,负责<h:link><h:button> 的HTML 输出生成的OutcomeTargetRenderer 类在附加流导航参数之前错误地检查NavigationCase#getToFlowDocumentId() 是否返回非null。但是,基于the javadoc,基本实现永远不会返回null,而是一个空字符串。因此,渲染器始终认为它处于流导航的中间,并始终附加关联的jftfdijffi 请求参数。解决方法是让它检查它是否返回一个非空字符串。

我将其报告为issue 3054,他们确认这是一个错误,目前正在解决此问题。 Mojarra 2.2.5 中可能会提供该修复程序。

更新:截至目前,不到一天后,它已修复为 2.2.5。


顺便说一句,jftfdi 代表“javax.faces To Flow Document ID”,在the javadoc 中指定如下:

由组件系列javax.faces.OutcomeTarget 的渲染器渲染的组件必须使用此常量作为参数名称,该参数表示该组件将导致输入的流的定义文档 ID。

jffi 代表“javax.faces Flow ID”,在the javadoc 中指定如下:

由组件系列javax.faces.OutcomeTarget 的渲染器渲染的组件必须使用此常量作为参数名称,该参数表示该组件将导致输入的流的流 ID。

【讨论】:

    【解决方案2】:

    我之前也遇到过同样的错误。这个bug的根源是jsf的版本。 只需尝试像这样将版本升级到 2.2.5:

        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.2.5</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.2.5</version>
        </dependency> 
    

    希望对你有帮助

    【讨论】:

    • 这已经在赞成和接受的答案中:“更新:截至目前,不到一天后,它已修复为 2.2.5。” 所以这个答案添加没有什么问题。你能详细说明为什么你认为应该有这个答案吗?
    猜你喜欢
    • 2013-07-09
    • 1970-01-01
    • 2023-03-14
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多