【问题标题】:When does mojarra adds a naming container to the list of optional parameters?mojarra 何时将命名容器添加到可选参数列表中?
【发布时间】:2016-08-14 19:10:32
【问题描述】:

AjaxBehaviorRenderer (line 260) 类的源代码中,有一行显然将NamingContainer Id 附加到mojarra.ab(...) 的可选参数列表中。我从来没有遇到过,所以我很好奇它什么时候被使用:

RenderKitUtils.appendProperty(ajaxCommand, "com.sun.faces.namingContainerId", namingContainerId, true);

第 260 行

【问题讨论】:

标签: jsf rendering jsf-2.2 mojarra naming-containers


【解决方案1】:

上周在 spec issue 790 工作时,应该可以解决 a.o. Rendering other form by ajax causes its view state to be lost, how do I add this back?,这是由 Portlet 专家 Neil Griffin 向我解释的。

看来,portlet 可以有多个 JSF 视图呈现到同一个 HTML 文档,每个都有自己的视图状态。在 portlet 中,有一个特殊的 UIViewRoot 实例,它实现了 NamingContainer。在常规渲染期间,所有表单、输入和命令都将具有以视图自己的客户端 ID 为前缀的 ID 和名称。这将在同步回发期间正常工作。 Portlet 可以通过这种方式识别要恢复的确切视图。

但是,在异步回发期间,jsf.js 将创建一堆额外的特定于 ajax 的请求参数,例如 javax.faces.sourcejavax.faces.partial.event 等。这些请求参数名称不以视图自己的客户端 ID 为前缀。因此,portlet 无法将它们与特定视图相关联。因此impl issue 3031

还有另一个问题是 ajax 响应中的视图状态标识符没有以这种方式正确命名。因此,portlet 实现必须在所谓的“JSF 桥”中定制部分响应编写器。在实施规范问题 790 期间将考虑到这一点。与当前实施中那样嗅探“portlet 环境”不同,将对UIViewRoot instanceof NamingContainer 进行检查,这更灵活且独立于 portlet。 Mojarra 特定的com.sun.faces.namingContainerId 也将被删除。相反,这个值会被渲染到<partial-response id="...">,这样jsf.js就可以从那里提取。

总而言之,如果您只针对基于 servlet 的环境,这并不重要。

【讨论】:

    【解决方案2】:

    根据balusC评论:

    它只对基于 portlet 的应用程序(而不是基于 servlet 的应用程序)感兴趣。 我无法准确解释它的用途和用途(portlet/liferay 家伙可能),但 portlet 特定的功能称为“命名空间 参数”。见https://web.liferay.com/web/meera.success/blog/-/blogs/liferay-requires-name-spaced-parameters

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-09
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多