里面我有以下的复合组件(仅限相关的代码):通F:属性到f:AJAX监听复合执行
<cc:interface>
<cc:attribute name="message" type="com.virtuafisica.business.problemsmgmt.entity.Message" required="true" />
<cc:attribute name="notifiedListener" method-signature="void listener(javax.faces.event.AjaxBehaviorEvent)" />
</cc:interface>
<cc:implementation>
<h:selectBooleanCheckbox value="#{cc.attrs.message.notified}">
<f:attribute name="msg" value="#{cc.attrs.message}" />
<c:if test="#{cc.getValueExpression('notifiedListener') != null}">
<f:ajax event="change" listener="#{cc.attrs.notifiedListener}" />
</c:if>
</h:selectBooleanCheckbox>
</cc:implementation>
该复合材料是由一个一个facelet叫:
而且变化事件在后台bean中像这样处理:
public void changeNotified(AjaxBehaviorEvent event) {
Message message = (Message) event.getComponent().getAttributes().get("msg");
if (message == null) {
logger.log(Level.FINEST, "Null message!");
return;
}
....
}
问题是该消息是null
在后台bean,虽然event.getComponent()
是正确的(是HTMLSelectBooleanCheckbox
)。
为什么不设置属性?
谢谢你们
它的工作原理,谢谢!但是,为什么'cc.notifiedListener'而不是'cc.attrs.notifiedListener'? – Alex
因为'#{cc}'引用'YourComposite'实例。你想调用那里的方法,而不是传入的方法。 – BalusC
好的,理解。谢谢!!! – Alex