6

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

page.jsf?jftfdi=&jffi=

代替

page.jsf

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

4

2 回答 2

8

这是 Mojarra 中的一个错误。当没有任何流导航配置(通过新的@FlowScoped注释和<j:flow-xxx>标签)时,它们不应该被附加。

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

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

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


顺便说一下,它jftfdi代表“ To Flow Document ID”,它在javadocjavax.faces中指定如下:

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

并且jffi代表“流 ID”,它在javadocjavax.faces中指定如下:

由 component-family 的 Renderer 渲染的组件javax.faces.OutcomeTarget必须使用此常量作为参数名称,该参数表示该组件将导致输入的流的流 id。

于 2013-10-08T23:41:27.630 回答
-1

我之前也有同样的错误。这个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> 

希望它有帮助

于 2017-05-14T18:12:30.260 回答