mojarra 何时将命名容器添加到可选参数列表中?
When does mojarra adds a naming container to the list of optional parameters?
在 class AjaxBehaviorRenderer (line 260) 的源代码中,有一行显然将 NamingContainer
ID 附加到 mojarra.ab(...)
的可选参数列表中。我从来没有遇到过它,所以我很好奇它是什么时候使用的:
RenderKitUtils.appendProperty(ajaxCommand, "com.sun.faces.namingContainerId", namingContainerId, true);
第 260 行
根据 balusC 评论:
It's only interesting for portlet based apps (not servlet based apps).
I can't exactly explain why and what it is used for (a portlet/liferay
guy might), but the portlet specific feature is called "namespaced
parameters". See https://web.liferay.com/web/meera.success/blog/-/blogs/liferay-requires-name-spaced-parameters
在 spec issue 790 last week, which should solve a.o. Rendering other form by ajax causes its view state to be lost, how do I add this back? 上工作时,Neil Griffin 向我解释了这一点,他是一个 portlet 专家。
似乎 portlet 可以有多个 JSF 视图呈现到同一个 HTML 文档,每个视图都有自己的视图状态。在 portlet 中,有一个特殊的 UIViewRoot
实例实现了 NamingContainer
。在常规呈现期间,所有表单、输入和命令的 ID 和名称都将以视图自己的客户端 ID 为前缀。这将在同步回发期间正常工作。 Portlet 可以通过这种方式识别要恢复的确切视图。
然而,在异步回发期间,jsf.js
将创建一堆额外的 ajax-特定请求参数,例如 javax.faces.source
、javax.faces.partial.event
等。那些请求参数名称不以视图自己的客户端 ID 为前缀。因此 portlet 无法将它们与特定视图相关联。因此 impl issue 3031.
ajax 响应中的视图状态标识符没有以这种方式正确命名空间,这是另一个问题。因此,portlet 实现必须在所谓的 "JSF bridge" 中自定义部分响应编写器。在实施规范问题 790 期间将考虑到这一点。与在当前实施中嗅探 "portlet environment" 不同,将对 UIViewRoot instanceof NamingContainer
进行检查,这更灵活且独立于 portlet。 Mojarra 特定的 com.sun.faces.namingContainerId
也将被删除。相反,此值将呈现为 <partial-response id="...">
,以便 jsf.js
可以从那里提取。
总而言之,如果您只针对基于 servlet 的环境,那么这并不重要。
在 class AjaxBehaviorRenderer (line 260) 的源代码中,有一行显然将 NamingContainer
ID 附加到 mojarra.ab(...)
的可选参数列表中。我从来没有遇到过它,所以我很好奇它是什么时候使用的:
RenderKitUtils.appendProperty(ajaxCommand, "com.sun.faces.namingContainerId", namingContainerId, true);
第 260 行
根据 balusC 评论:
It's only interesting for portlet based apps (not servlet based apps). I can't exactly explain why and what it is used for (a portlet/liferay guy might), but the portlet specific feature is called "namespaced parameters". See https://web.liferay.com/web/meera.success/blog/-/blogs/liferay-requires-name-spaced-parameters
在 spec issue 790 last week, which should solve a.o. Rendering other form by ajax causes its view state to be lost, how do I add this back? 上工作时,Neil Griffin 向我解释了这一点,他是一个 portlet 专家。
似乎 portlet 可以有多个 JSF 视图呈现到同一个 HTML 文档,每个视图都有自己的视图状态。在 portlet 中,有一个特殊的 UIViewRoot
实例实现了 NamingContainer
。在常规呈现期间,所有表单、输入和命令的 ID 和名称都将以视图自己的客户端 ID 为前缀。这将在同步回发期间正常工作。 Portlet 可以通过这种方式识别要恢复的确切视图。
然而,在异步回发期间,jsf.js
将创建一堆额外的 ajax-特定请求参数,例如 javax.faces.source
、javax.faces.partial.event
等。那些请求参数名称不以视图自己的客户端 ID 为前缀。因此 portlet 无法将它们与特定视图相关联。因此 impl issue 3031.
ajax 响应中的视图状态标识符没有以这种方式正确命名空间,这是另一个问题。因此,portlet 实现必须在所谓的 "JSF bridge" 中自定义部分响应编写器。在实施规范问题 790 期间将考虑到这一点。与在当前实施中嗅探 "portlet environment" 不同,将对 UIViewRoot instanceof NamingContainer
进行检查,这更灵活且独立于 portlet。 Mojarra 特定的 com.sun.faces.namingContainerId
也将被删除。相反,此值将呈现为 <partial-response id="...">
,以便 jsf.js
可以从那里提取。
总而言之,如果您只针对基于 servlet 的环境,那么这并不重要。