使用客户端 ID 引用组件与使用 p:component 之间的区别

Difference between referencing component with client ID and using p:component

我目前正在更改我的一个基于 primefaces 6.1 的项目的核心子视图的结构以进行概念验证,并找到了很多参考资料,例如 X:Y:Z:A、X:Y:Z:B 等...在将引用的组件移动到树的其他位置后显然失败了,所以我的解决方案是将 "long id path" 替换为 p:component('A') 等等。几次替换后,我想到了一些问题:"Why didn't they just use p:component()?"、"Were them intentionally referred this way...if so why?"。最后是最重要的 - 这个。使用其 ID 及其祖先(如 X:Y:Z:A 和使用 p:component('A') 调用组件之间有什么区别吗?

同时考虑以下情况... p:component('x') return 会怎样?会不会有任何碰撞或歧义异常?

 <f:view>
    <h:outputText id="x" />
    <h:form id="form1">
      <h:outputText id="x" />
    </h:form>
  </f:view>

提前致谢

一些事情...

  1. p:component 找到它能找到的 "first" 参考并 returns 它所以我相信它会找到第一个 h:outputText.

  2. p:component 已被弃用,并且已从即将发布的 PF 7.1 版本中删除,您可以在此处的迁移指南注释中看到:https://github.com/primefaces/primefaces/wiki/Migration-Guide

所以要回答你最好直接用 :form1:x 引用它,或者如果你想要 p:component 找到第一个的行为,你可以使用 PFS 选择器框架 @root:@id(x) 查看示例这里:https://www.primefaces.org/showcase/ui/ajax/selector.xhtml