我在JSF中通过AJAX更新组件:
<h:form>
<h:outputLink>Click me
<f:ajax event="click" render=":messages" />
</h:outputLink>
</h:form>
<h:messages id="messages" globalOnly="true" />
Run Code Online (Sandbox Code Playgroud)
由于<h:messages />驻留在外面,<h:form />我必须在ID前面添加冒号(:).这有效.
但是,如果我将相同的代码放入组件并将该组件包含到我的页面中,则代码将失败.原因是:messages声明是指组件层次结构的根,而<h:messages />我想要更新的组件实际上位于我的自定义组件下,该组件位于页面下(因此位置是样式的:myComponent:messages.
在我的组件内部,如何实现<h:messages />组件的正确前缀?我知道我可以手动为我的组件分配ID,并使用它来为引用添加前缀(如:#{cc.attrs.id}:messages).但是,我不知道这个组件所处的组件层次结构的级别,所以所需的前缀甚至可能是这样的:foo:bar:x:y:messages.