考虑一个简单的复合组件,它采用某种动作参数 - 例如,一个简单的链接'美化'.我想'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>
Run Code Online (Sandbox Code Playgroud)
我通过客户端行为公开事件.我这样使用它:
<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>
Run Code Online (Sandbox Code Playgroud)
你可以看到我想做的事情:我想在复合定义之外做一个ajax渲染; 只是将渲染设置为"外部"会产生可怕的<f:ajax> contains an unknown id错误.
是的,我知道命名容器,我知道我们可以用冒号前置并指定一个绝对路径,但这很笨重.如果我将它包装在更多层中(这是整点),我必须手动将这些引用链接在一起.
我是否可以进行某种相对引用,例如render="../outside"跳过对组件父容器的引用?
我用a4j做了一个jsf 1应用程序,这个模式在整个地方都被使用了.
在JSF 2.0中,您可以使用EL中的隐式cc和component对象.要获取任何组件的完整客户端ID,请执行以下操作:
#{component.clientId}
Run Code Online (Sandbox Code Playgroud)
要检索复合组件的客户端ID,请执行以下操作:
#{cc.clientId}
Run Code Online (Sandbox Code Playgroud)
以同样的方式,您也可以使用获取父级#{cc.parent}.在这种情况下,这可能是你想要的.有关更长的答案,请参阅使用JSF 2.0获取命名容器内的组件clientId的完整前缀.
| 归档时间: |
|
| 查看次数: |
9389 次 |
| 最近记录: |