我尝试了JavaServer Faces 2.2的最新版本(Mojarra 2.2.4) 并注意到以这种不受欢迎的方式更改我的查询字符串:
page.jsf?jftfdi=&jffi=
而不是
page.jsf
我发现它是新的JSF 2.2功能。但这些查询参数(jftfdi,jffi)破坏了我对SEO友好的网址。我该如何禁用它?
答案 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
,而是返回一个空字符串。因此,渲染器始终认为它位于流导航的中间,并始终附加关联的jftfdi
和jffi
请求参数。修复是让它检查它是否返回非空字符串。
我将其报告为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>
希望它有用