我在应用程序中使用了primefaces 4.0和jsf 2.2。我创建了一个页面,其中数据表嵌套在选项卡视图中。现在,当我想过滤数据表时,它会继续加载并且不会产生结果。
一段时间后,我意识到,javascript抛出以下错误:"用于var'test'的小部件不可用!
我想这应该是问题所在,但是问题是什么或我该如何解决这个问题?有人有想法吗?
此致敬意!
我在这里发布我的答案,希望可以帮助那里的一些人。
我有同样的问题。我的情况是我想为我的<p:dataTable>
执行默认过滤器,因此,我必须在页面加载时在javascript中执行PF('dtWidgetVar').filter();
脚本。
这是我最初的尝试:
$(document).ready(function()
{
PF('dtWidgetVar').filter();
});
它看起来很好,但就是不起作用。直到我在Chrome控制台中找到错误 Widget for var 'dtWidgetVar' not available!
,并在谷歌上搜索了几个小时,终于我找到了这个线程。因此,我添加一个$(function(){});
来包装我的脚本,如下所示:
$(document).ready(function()
{
$(function()
{
PF('dtWidgetVar').filter();
});
});
轰!,终于成功了。从这里和这里都说$(function(){});
和$(document).ready(function(){});
实际上是相同的,所以我也不知道它为什么有效。我也尝试只使用$(function(){});
但它不起作用。必须同时使用这两个函数才能使其工作,至少就我而言。但是,我仍然希望这对某些人有所帮助!对不起,我的英语不好。
在没有发布代码的情况下,不可能说。 但是,我可以建议寻找几件事。
- 检查视图中是否有重复的小部件名称。显然你不会从你得到的信息中直觉到这一点,但我回想一下,过去收到重复小部件的相同消息名字
-
检查是否有一个组件,其中您为小部件变量指定了与 ID 相同的名称。 我读过这是要避免的。
-
一个非常常见的错误是将 ID 和小部件名称混为一谈。 那是,您正在尝试使用 ID 作为小部件变量
-
查看代码中尝试引用"测试"的内容
- 我自己无法确认这一点,但我看到其他 StackOverflow 帖子表明,当您导入了 jQuery 库的两个副本时,这可能是一个错误
我在p:commandButton
中使用p:ajax update="@all"
时遇到过Widget for var '[widgetVar]' not available
。我可以通过将要更新的内容放在我在update
中引用的h:panelGroup
中并将声明widgetVar
的元素放在该面板组之外来避免此问题。