【发布时间】:2015-07-11 10:34:06
【问题描述】:
我有以下复合组件(仅相关代码):
<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 调用的:
<my:message message="#{msg}" notifiedListener="#{problem.changeNotified}"/>
更改事件在后备 bean 中是这样处理的:
public void changeNotified(AjaxBehaviorEvent event) {
Message message = (Message) event.getComponent().getAttributes().get("msg");
if (message == null) {
logger.log(Level.FINEST, "Null message!");
return;
}
....
}
问题是支持 bean 中的消息是 null,尽管 event.getComponent() 是正确的(是 HTMLSelectBooleanCheckbox)。
为什么没有设置属性?
谢谢大家
【问题讨论】:
标签: jsf attributes jsf-2.2 composite-component