如何在JSF中禁用jftfdi jffi查询参数

时间:2013-10-08 18:21:51

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

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

page.jsf?jftfdi=&jffi=

而不是

page.jsf

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

2 个答案:

答案 0 :(得分:7)

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

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

我将其报告为issue 3054并且他们确认这是一个错误,目前正在处理它。修复可能会在Mojarra 2.2.5中提供。

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


顺便说一下,jftfdi代表“javax.faces要流式文档ID”,在the javadoc中指定如下:

  

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

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

  

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

答案 1 :(得分:-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> 

希望它有用