Мне удалось прочитать атрибут, переданный в копию в следующей настройке.
<test:inner>
<f:attribute name="fAttribute" value="myAttributeValue" />
</test:inner>
<cc:implementation>
<h:commandButton value="button" actionListener="#{testBean.actionListener}" >
<f:attribute name="innerAttribute" value="innerAttributeValue" />
<cc:insertChildren /> <!-- not necessary, I hoped it would pass the outer attribute --->
</h:commandButton>
</cc:implementation>
public void actionListener(ActionEvent event) {
event.getComponent().getNamingContainer().getAttributes().get("fAttribute")
// > myAttributeValue
event.getComponent().getAttributes().get("innerAttribute")
// > innerAttributeValue
}
Хитрость заключалась в том, чтобы искать в контейнере именованиякнопка.Таким образом, cc всегда является контейнером именования, поэтому вы можете быть уверены, что попали во внутренний компонент.
Я не уверен, что это так, как было задумано, но насколько я понял,Naming Container собирает такие атрибуты для своих дочерних элементов.
Q: Кто-нибудь знает, считается ли отсутствие передачи атрибутов в кнопку ошибкой в Mojarra / JSF?