繁体   English   中英

mojarra何时将命名容器添加到可选参数列表中?

[英]When does mojarra adds a naming container to the list of optional parameters?

在类AjaxBehaviorRenderer的源代码中(第260行),有一行代码显然将NamingContainer Id附加到mojarra.ab(...)的可选参数列表中。 我从没碰过它,所以对于何时使用它感到好奇:

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

260行

上周在处理规格问题790时应解决的问题ao 通过ajax渲染其他形式会导致其视图状态丢失,我该如何重新添加呢? ,这是Portlet专家Neil Griffin向我解释的。

看起来portlet可以具有多个JSF视图,这些视图呈现到同一HTML文档,每个视图都有自己的视图状态。 在portlet中,有一个特殊的UIViewRoot实例,该实例实现NamingContainer 在常规渲染期间,所有表单,输入和命令都将具有以视图自身的客户端ID开头的ID和名称。 在同步回发期间,这将正常工作。 Portlet可以这种方式标识要还原的确切视图。

但是,在异步回发期间, jsf.js将创建一堆额外的特定于Ajax的请求参数,例如javax.faces.sourcejavax.faces.partial.event等。这些请求参数名称不带有视图自身的前缀。客户编号。 因此,Portlet无法将它们与特定视图关联。 因此, 隐含问题3031

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

总而言之,如果仅针对基于servlet的环境,那并不是很重要。

根据balusC的评论:

这仅对基于Portlet的应用程序(而非基于Servlet的应用程序)感兴趣。 我无法确切解释其原因以及用途(Portlet / Liferay家伙可能会使用),但是Portlet的特定功能称为“命名空间参数”。 参见https://web.liferay.com/web/meera.success/blog/-/blogs/liferay-requires-name-spaced-parameters

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM