使用JSF 2.0获取命名容器内的组件clientId的完整前缀

我正在JSF中通过AJAX更新组件:

 Click me     

由于位于我必须在ID前面添加冒号(:)。 这很有效。

但是,如果我将相同的代码放入组件并将该组件包含到我的页面中,则代码将失败。 原因是:messages声明是指组件层次结构的根,而我想要更新的组件实际上位于我的自定义组件下,该组件位于页面下(因此位置是样式的:myComponent:messages

在我的组件内部,如何为组件创建正确的前缀? 我知道我可以手动为我的组件分配ID,并使用它来为引用添加前缀(例如:#{cc.attrs.id}:messages )。 但是,我不知道该组件所处的组件层次结构级别,因此所需的前缀可能类似于:foo:bar:x:y:messages

好像你可以通过表达式语言(EL)隐式对象( cccomponent )访问当前前缀:

  • cc.clientId返回当前复合组件的前缀
  • component.clientId返回任何当前组件的前缀。

例如,在页面中,通过调用某个组件

  

在这个组件中,可以像这样获取客户端ID:

  

ClientId for the composite component: #{cc.clientId}

ClientId for current any component: #{component.clientId}

以下内容应打印为:

 ClientId for the composite component: foo ClientId for current any component: foo:bar 

我从博客文章JSF获得了指针:使用组件标识符(id / clientId) 。 它声明这是JSF 2.0的新function。 在此之前,必须从支持bean以编程方式获取ID。

@Tuukka Mustonen,谢谢你的回答。

如果我们需要从同一个“地方”访问另一个id,我们可以使用:

        

JavaScript函数:

 function myJSFunction(message) { window.alert(message) } 

对话框窗口输出:

1)myForm:aaa

2) null

3)myForm:ccc

4)myForm:aaa

注意:所以第1和第3个具有相同的输出。