您需要指定标签的
method-signature属性,
<cc:attribute>以便将属性值视为方法表达式。您可以使用JSTL视图构建时间标记
<c:if>来有条件地添加
<f:ajax>标记。
<cc:interface> <cc:attribute name="listener" method-signature="void listener()" /></cc:interface><cc:implementation> <h:someComponent> <c:if test="#{cc.getValueexpression('listener') != null}"> <f:ajax listener="#{cc.attrs.listener}" /> </c:if> </h:someComponent></cc:implementation>(#{not empty cc.attrs.listener}因为EL不能正常工作,所以会将属性作为值表达式隐式评估)
然后,您可以按以下方式使用它:
<my:someComposite listener="#{bean.listener}" />或者,当您的环境不支持EL 2.2时,请创建一个支持组件:
@FacesComponent("someComponent")public class SomeComponent extends UINamingContainer { public boolean isHasListener() { return getValueexpression("listener") != null; }}声明并用作
<cc:interface type="someComponent"> <cc:attribute name="listener" method-signature="void listener()" /></cc:interface><cc:implementation> <h:someComponent> <c:if test="#{cc.hasListener}"> <f:ajax listener="#{cc.attrs.listener}" /> </c:if> </h:someComponent></cc:implementation>


