gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:53:10 26 4
gpt4 key购买 nike

我在 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) 隐式对象(cccomponent)访问当前前缀:

  • 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com