我在 JSF 中通过 AJAX 更新组件:
<h:form>
<h:outputLink>Click me
<f:ajax event="click" render=":messages" />
</h:outputLink>
</h:form>
<h:messages id="messages" globalOnly="true" />
作为 <h:messages />
住在外面 <h:form />
我必须在 ID 前加上冒号 ( :
)。这行得通。
但是,如果我将相同的代码放入一个组件并将该组件包含到我的页面中,代码就会失败。原因是 :messages
声明指的是组件层次结构的根,而 <h:messages />
我要更新的组件实际上位于我的自定义组件下,该组件位于页面下(因此位置的样式为 :myComponent:messages
。
在我的组件中,如何获得 <h:messages />
的正确前缀零件?我知道我可以手动为我的组件分配 ID,并使用它作为引用的前缀(如 :#{cc.attrs.id}:messages
)。但是,我不知道该组件位于组件层次结构的哪个级别,因此所需的前缀甚至可能类似于 :foo:bar:x:y:messages
。 .
最佳答案
似乎您可以通过表达式语言 (EL) 隐式对象(cc
和 component
)访问当前前缀:
cc.clientId
返回当前复合组件的前缀component.clientId
返回任何当前组件的前缀。
比如在一个页面中,调用某个组件通过
<myComponent id="foo">
在此组件中,可以像这样获取客户端 ID:
<h:outputText id="bar">
<p>ClientId for the composite component: #{cc.clientId}</p>
<p>ClientId for current any component: #{component.clientId}</p>
</h:outputText>
以下内容应打印为:
ClientId for the composite component: foo
ClientId for current any component: foo:bar
我从博文 JSF: working with component identifiers (id/clientId) 得到了指示.它声明这是 JSF 2.0 的新功能。在此之前,必须以编程方式从辅助 bean 中获取 ID。
关于java - 使用 JSF 2.0 获取命名容器内组件 clientId 的完整前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3501022/