Jsf 使用组件ID作为widgetVar名称

Jsf 使用组件ID作为widgetVar名称,jsf,primefaces,widget,variable-names,Jsf,Primefaces,Widget,Variable Names,我有一个关于组件ID和dialog(或其他组件)小部件变量名的简单问题 使用组件ID作为同一组件的小部件变量名是否存在问题 例如 这段JSF基本上生成以下HTML(不完全如此,但效果相同): 这将导致所有原始小部件变量函数完全不可用,因为变量dlgRelConsultasRealizadas现在引用的实例与原始小部件变量没有相同的函数,如show(),等等 因此,建议为widgetVar指定一个唯一值,该值不能用作任何(生成的)HTML元素的ID或名称。一种常见的做法是使用一致的标签作为小部件变

我有一个关于组件ID和dialog(或其他组件)小部件变量名的简单问题

使用组件ID作为同一组件的小部件变量名是否存在问题

例如


这段JSF基本上生成以下HTML(不完全如此,但效果相同):

这将导致所有原始小部件变量函数完全不可用,因为变量
dlgRelConsultasRealizadas
现在引用的实例与原始小部件变量没有相同的函数,如
show()
,等等

因此,建议为
widgetVar
指定一个唯一值,该值不能用作任何(生成的)HTML元素的ID或名称。一种常见的做法是使用一致的标签作为小部件变量名的前缀(或后缀)。例如,
w

<p:dialog id="dlgRelConsultasRealizadas" widgetVar="w_dlgRelConsultasRealizadas" .../> 

现在不再作为
foo
,而仅作为
PF('foo')
提供。另请参见哈塔姆·阿利姆的博客:。

我在问这样做是否有问题?我在一些论坛(我认为是primefaces论坛)上看到这样做是不正确的,我想知道你对此的看法。谢谢你的关注,我在这里找到了答案和解释。版主可以关闭这篇文章。我想你可以把它作为你的答案发布,这样其他人就可以从中受益。好的解释,它比我的serachs好。谢谢^^ Chrome也会这样做。只要id带有命名容器,一切都会好起来,所以这是一种被遗忘的地雷虫(一旦你忘记了把它放在哪里,它就会爆炸),欢迎你。默认情况下(使用正确的doctype、体面的JS代码等),Chrome并不像IE那样愚蠢,它完全覆盖了原来的变量(如果之前已经定义过的话)。
<body>
    <div id="dlgRelConsultasRealizadas">...</div> <!-- Component ID -->
    <script>var dlgRelConsultasRealizadas = ...;</script> <!-- Widget var -->
</body>
dlgRelConsultasRealizadas = document.getElementById("dlgRelConsultasRealizadas");
<p:dialog id="dlgRelConsultasRealizadas" widgetVar="w_dlgRelConsultasRealizadas" .../> 
<p:xxx ... widgetVar="foo">