裏面我有以下的複合組件(僅限相關的代碼):通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