Jsf component.clientId和p:component()生成的客户端id之间的差异
我正在尝试检索p:dataList中的h:panelGroup的客户端id 我尝试了两种方法: 1.使用component.clientId,例如:Jsf component.clientId和p:component()生成的客户端id之间的差异,jsf,primefaces,el,clientid,Jsf,Primefaces,El,Clientid,我正在尝试检索p:dataList中的h:panelGroup的客户端id 我尝试了两种方法: 1.使用component.clientId,例如: <h:panelGroup id="listItem"> <h:outputText value="#{component.clientId}" /> </h:panelGroup> 2.使用p:component()例如: 请注意,此面板组位于数据列表中。现在,在这两种情况下生成的客户端ID是
<h:panelGroup id="listItem">
<h:outputText value="#{component.clientId}" />
</h:panelGroup>
2.使用p:component()例如:
请注意,此面板组位于数据列表中。现在,在这两种情况下生成的客户端ID是不同的。(1) 没有将值“listItem”附加到客户端id,而(2)在生成的clientId中具有值“listItem”
此外,使用(1)生成的客户端id与生成的html组件上的客户端id不同
有人能解释一下为什么会这样吗?隐式EL对象
#{component}
指的是当前的组件,即
<h:outputText value="#{component.clientId}" />
另见:
- 类不实现接口,因此,
的id不会在其子类的客户端id中结束李>
解析为使用此变量的当前组件#{component}
根据这一点,在您输出的第一个代码段中,
- 我的回答有两个前提:
的客户机id,即其命名容器的id加上分隔符加上自动生成的id(请注意,您将:
放错了位置,该id应该是{component:clientId}
),在第二个代码段中,您使用PrimeFaces的EL函数,该函数在整个组件树中搜索id在其参数中指定的组件,并返回找到的组件的客户端id
因此,您需要寻找不同的组件:
在第一种情况下,和
在第二种情况下,这解释了结果的差异
在当前设置下,以下表达式将产生相同的结果:
和{component.parent.clientId}
{p:component('listItem')}
{component:clientId}
无效。p:component()
不是JSTL函数,而是EL函数。要了解JSTL的确切含义,请阅读《感谢您的回复》@skuntselthanky BalusC的介绍。我最终使用了component.clientId。另外,我还注意到binding属性对我不起作用。正如我在问题中提到的,我在一个数据列表中有一个panelGroup,并且该panelGroup有一个绑定属性,如果它没有被绑定到唯一的变量(如答案中明确提到的),则可能会将视图弄乱(即,panelGroup中没有任何内容被呈现)。答案是完整的(注意:没有bean属性!),如果视图中没有binding=“#{listItem}”
任何其他位置,也不在include文件或复合文件等中,那么答案应该是有效的。
<h:outputText value="#{component.clientId}" />
<h:panelGroup id="listItem" binding="#{listItem}">
<h:outputText value="#{listItem.clientId}" />
</h:panelGroup>