【发布时间】:2010-08-24 15:57:37
【问题描述】:
我有一个复合组件,我传入一个任意定义的属性:
<x:mycomp x="..."/>
x 在 cc 的接口定义中被这样定义。在mycomp 的实现内部我有一个事件监听器:
<composite:implementation>
<f:event type="preRenderComponent" listener="#{mycontroller.init}" />
</composite:implementation>
现在我想用这个任意参数x 在后端做一些事情。如何通过系统事件传递它,例如使用f:attribute 标签?还是从事件中获取源组件并通过其内部进行拖网? (说到这些属性在 UIComponent 中存储的位置 - 我找不到它们,反正不是在属性中)。
如果不可能,这会严重限制系统事件的有用性。如果您将组件放在 ui:repeat 中,则侦听器会被多次触发,因此它会在事件触发期间遍历树。
我唯一能想到的就是将 init 直接编码到渲染中:
<composite:implementation>
#{mycontroller.init(cc.attrs.x)} //returns empty string
<!--f:event type="preRenderComponent" listener="#{mycontroller.init}" /-->
</composite:implementation>
但我认为这就是预渲染系统事件的用途。
【问题讨论】:
-
抱歉,我已阅读您的问题多达 3 次,但我似乎无法过滤/理解底层功能需求。您能否更新您的问题以详细说明一下?
-
哇,快!我正在将一个属性传递给一个复合组件。假设它必须在渲染之前以某种方式进行装饰。系统事件可以获取该属性“x”以便在服务器上使用它吗?与您在网站中描述的关于通过动作监听器传递参数的事情相同(如果您是同一个人balusc.blogspot.com/2006/06/communication-in-jsf.html),除了这次它是事件监听器,而不是动作监听器。本质上,我正在寻找一种在渲染之前初始化传入参数的方法。