jsf - component.clientId 和 p :component() 生成的客户端 id 之间的差异

标签 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() 例如:
<h:panelGroup id="listItem">
    <h:outputText value="#{p:component('listItem')}" />
</h:panelGroup>

请注意,此面板组位于数据列表中。现在,两种情况下生成的客户端 ID 是不同的。 (1) 没有值“listItem”附加到客户端 ID,而 (2) 在生成的 clientId 中具有值“listItem”。

此外,使用 (1) 生成的客户端 ID 与生成的 html 组件上的客户端 ID 不同。

任何人都可以对这个问题有所了解,为什么会这样?

最佳答案

隐式 EL 对象 #{component}当前组件,在这种情况下

<h:outputText value="#{component.clientId}" />
<h:outputText>本身!

如果您打算打印另一个组件的客户端 ID,则需要通过 binding 将组件实例绑定(bind)到 View 中的唯一变量,以便您可以在同一 View 中的其他任何位置引用它。
<h:panelGroup id="listItem" binding="#{listItem}">
    <h:outputText value="#{listItem.clientId}" />
</h:panelGroup>

也可以看看:
  • Implicit EL objects
  • How does the 'binding' attribute work in JSF? When and how should it be used?
  • 关于jsf - component.clientId 和 p :component() 生成的客户端 id 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20539713/

    相关文章:

    jsf - 如何在jsf中重置?

    jsf - 无法在 Tomcat 7 上的 JSF 应用程序中加载 Oracle JDBC 驱动程序

    javascript - Primefaces 对话框设置高度的一半屏幕大小

    css - 样式 ="display: none"时未呈现 Primefaces gmap

    hadoop - 检查 Oozie Hive 操作中的 EL 表达式中是否存在变量

    java - 如何在JSP中使用空键获取Map值

    java - JSF 将 EL 表达式显示为纯文本而不是计算值

    jquery - Primefaces - 对话框中的命令按钮正在刷新页面

    Primefaces 保存/通过过滤数据表结果列表

    jquery - JSF 和 JQuery - 不起作用