在JSF 2.0中检索其他组件的客户端ID

cut*_*hin 18 java jsf richfaces clientid primefaces

JSF 2.0是否有内置方法来查找另一个组件的客户端ID?在SO上有大约一千个与客户端ID相关的问题,并且有很多hackish方法可以做到这一点,但我想知道JSF 2.0是否带来了一个我不知道的更简单的方法.

#{component.clientId} 评估给定组件自己的客户端ID,但我想引用另一个组件的ID.

这个博客文章提到component.clientId,它也说#{someComponent.clientId}有效,但从我可以告诉它没有.我相信他在JSF 2.0的任何参考实现出来之前都写过,所以他只是去了JSR,也许这个功能发生了变化.我不确定.

我知道PrimeFaces和RichFaces都有自己的函数来返回客户端ID,但我只是想知道是否有内置的JSF 2.0方法.这里有些例子:

这可以返回outputText的ID.

`<h:outputText value="My client ID : #{component.clientId}" />`
Run Code Online (Sandbox Code Playgroud)

根据上面的博客文章,这应该有效,但事实并非如此.我没有输出.

`<h:button id="sampleButton" value="Sample" />`

`<h:outputText value="sampleButton's client ID : #{sampleButton.clientId}" />`
Run Code Online (Sandbox Code Playgroud)

这适用于PrimeFaces:

`<h:outputText value="PrimeFaces : sampleButton's client ID : #{p:component('sampleButton')}" />` 
Run Code Online (Sandbox Code Playgroud)

在RichFaces中工作:

`<h:outputText value="RichFaces : sampleButton's client ID : #{rich:clientId('sampleButton')}" />`
Run Code Online (Sandbox Code Playgroud)

此外,如果可能的话,我正在寻找不会破坏的解决方案,如果我更改了javax.faces.SEPARATOR_CHAR值,或者我在引用的组件之外添加/删除容器.我花了很多时间来追踪由硬编码ID路径引起的问题.

Bal*_*usC 33

您需要在视图范围中按binding属性为组件分配变量名称.

<h:button id="sampleButton" binding="#{sampleButton}" value="Sample" />
<h:outputText value="sampleButton's client ID : #{sampleButton.clientId}" />
Run Code Online (Sandbox Code Playgroud)

  • 那很棒.我假设`binding`属性专门用于将组件暴露给支持bean - 我没有意识到你也可以在范围上发布组件.非常感谢. (3认同)