我想在我的复合组件中实现一个“回调”功能。此方法将在必要时从支持组件中调用。
XHTML部分是:
<cc:interface componentType="partnerSelComp">
<cc:attribute name="value" type="com.app.data.Partner"/>
<cc:attribute name="callback" method-signature="void notify(java.lang.Long)"/>
</cc:interface>
<cc:implementation>
<span id="#{cc.clientId}">
<p:inputText id="code" binding="#{cc.partnerCode}">
<p:ajax event="blur" update="code name msg" listener="#{cc.validate}" />
</p:inputText>
<p:outputLabel id ="name" binding="#{cc.partnerName}"/>
<p:message id="msg" for="code"/>
</span>
</cc:implementation>后端组件的相关部分为:
@FacesComponent("partnerSelComp")
public class PartnerSelComp extends UIInput implements NamingContainer {
private InputText partnerCode;
private OutputLabel partnerName;
@Override
public String getFamily() {
return UINamingContainer.COMPONENT_FAMILY;
}
public void validate() {
...
MethodExpression exp = (MethodExpression) getAttributes().get("callback");
...
}
...
}高于exp的值为空值。如何获取callback属性,以及如何执行它?
发布于 2019-10-10 20:57:58
调用不带参数的函数的解决方案(Java 1.8)。
组件:
<composite:interface>
<composite:attribute name="buttonCallback" type="java.util.function.Consumer"/>
</composite:interface>
<composite:implementation>
<p:commandButton value="Submit" action="#{cc.attrs.buttonCallback.accept(null)}"/>
<composite:implementation>视图中的使用情况:
<mycomp:myCC buttonCallback="#{myBackingBean.myCallback}"/>支持bean中的用法:
private Consumer<Void> myCallback;
@PostConstruct
public void init() {
myCallback= this::myFunction;
}
public void myFunction(Void v) { //... }https://stackoverflow.com/questions/42038861
复制相似问题