使用JSF 2.0获取命名容器内的组件clientId的完整前缀
我正在JSF中通过AJAX更新组件:
Click me
由于位于
我必须在ID前面添加冒号(:)。 这很有效。
但是,如果我将相同的代码放入组件并将该组件包含到我的页面中,则代码将失败。 原因是:messages
声明是指组件层次结构的根,而我想要更新的组件实际上位于我的自定义组件下,该组件位于页面下(因此位置是样式的
:myComponent:messages
。
在我的组件内部,如何为组件创建正确的前缀? 我知道我可以手动为我的组件分配ID,并使用它来为引用添加前缀(例如
:#{cc.attrs.id}:messages
)。 但是,我不知道该组件所处的组件层次结构级别,因此所需的前缀可能类似于:foo:bar:x:y:messages
。
好像你可以通过表达式语言(EL)隐式对象( cc
和component
)访问当前前缀:
-
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个具有相同的输出。