考虑一个简单的复合组件,它采用某种动作参数——例如,一个简单的链接“美化器”。我想'ajaxify'它。
<composite:interface>
<composite:attribute name="act" method-signature="java.lang.String action()"></composite:attribute>
<composite:attribute name="text" required="true"></composite:attribute>
<composite:clientBehavior name="click" event="action" targets="l"/> </composite:interface>
<composite:implementation>
<h:commandLink id="l" act="#{cc.attrs.action}" immediate="true"> <b>#{cc.attrs.text}</b> </h:commandLink> </composite:implementation>
我通过客户行为公开一个事件。我这样使用它:
<h:panelGroup layout="block" id="outside">
#{mybean.otherdata} <br/>
<mc:mylink text="Click click" action="#{mybean.click}" >
<f:ajax event="click" render="outside"/>"
</mc:mylink><br/>
</h:panelGroup>
你可以看到我想要做什么:我想在复合定义之外做一个 ajax 渲染;只需将渲染设置为“外部”就会出现可怕的<f:ajax> contains an unknown id
错误。
是的,我知道命名容器,而且我知道我们可以在前面加上一个冒号并指定一个绝对路径,但这很笨拙。如果我将它包裹在更多层中(这是重点),我必须手动将这些引用链接在一起。
我可以进行某种相对引用,例如render="../outside"
跳过对组件父容器的引用吗?
我用 a4j 做了一个 jsf 1 应用程序,这种模式到处都在使用。