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

标签 java jsf reference components jsf-2

我在 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/

相关文章:

java - 在 Weblogic Server 中设置 Java 堆空间

java - 迁移到struts 2.3.24后,仍然不支持大于2GB的文件上传

jsf - 在 EL 中使用 && 会导致错误 : The entity name must immediately follow the '&' in the entity reference

java - 有没有办法在 Java 中强制对弱和/或软引用对象进行 GC?

java - 如何使用来自beanio的@Field获取枚举的值

java - 如何在 android 中的两个 ImageButton 之间画一条线?

javax.el.E​​LException : java. java.util.AbstractList.add 处的 lang.UnsupportedOperationException

jsf - 如何知道服务器(tomcat6)正在 JSF 1.2 应用程序中关闭

mysql - SQL如何引用变量列

.net - 引用的 DLL 未复制到引用项目