JSF 2.2 Post请求通过preenderview事件转发到另一个视图——PF资源缺失



场景如下:

视图A -通过在浏览器中输入URL来加载。通过按primefaces (PF - 5.2)命令按钮提交post请求,然后导航到另一个视图view b

视图B -有一个preenderview事件-在postBack=false上,检查一个特定的请求参数,如果它存在,转发(而不是重定向)到另一个视图C,使用导航处理程序。

视图C -问题是当这个视图加载时,Primefaces对象(javascript对象)被发现为null,例如错误为

"Uncaught TypeError: Cannot read property 'cw' of null"
against this script
Primefaces .cw("CommandButton","widget_next3",{id:"next3",widgetVar:"widget_next3"});之前View C有与PF相关的组件,所以我猜PF js和css应该自动添加。我没有手动添加任何PF js或css或jquery js,所有这些都通过PF组件ResourceDependency自动包含。但在这种情况下,既不包括PF css也不包括js。

-一切工作正常的视图C,如果视图B - preenderview事件导航到视图C与(重定向)faces-redirect=true。

在一个错误的情况下,如果我通过jquery检查-它给PF对象为空。

<h:outputScript>
$( document ).ready(function() {
                     console.log( "ready!" );
                     console.log( "Windows PrimeFaces=" + (window.PrimeFaces) );
                     console.log( "PrimeFaces=" + (PrimeFaces) );                        
                }); 
</h:outputScript>

但我想知道为什么问题只与PF (js和css),为什么JQuery对象"$"工作得很好-因为上面的函数工作得很好。

同样在错误场景中,如果我显式地包含以下内容,则一切正常

<h:outputScript name="primefaces.js" library="primefaces"/>
<h:outputStylesheet name="primefaces.css" library="primefaces" />
<h:outputStylesheet name="theme.css" library="primefaces-aristo" />

谢谢你看。

此错误之前是否有警告"主线程上的同步XMLHttpRequest已弃用,因为它对最终用户的体验有害。如需更多帮助,请查看https://xhr.spec.whatwg.org/"?

我面临同样的错误,发现我的浏览器(chrome)在ajax警告后没有加载PrimeFaces脚本。就像在警告之后,Chrome会默认设置async=true,并且不知何故会弄乱primefaces javascript文件。

为了测试,我在每个视图中添加了以下说明,并解决了问题。

$(document).ready(function() {
    $.ajaxPrefilter(function( options, originalOptions, jqXHR ) { options.async = false; })
});

我仍然试图理解为什么Chrome不通过异步请求加载javascript文件

相关内容

  • 没有找到相关文章

最新更新