JSF复合组件中的实现回调方法

问题描述 投票:1回答:1

我想在我的复合组件中实现“回调”功能。必要时将从支持组件调用此方法。

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属性,以及如何执行它?

jsf-2.2 composite-component
1个回答
0
投票

刚刚找到了一个解决方案(Java 1.8)来调用不带参数的函数。

Component:

<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>

用法:

<cc:myCC buttonCallback="#{myBackingBean.myFunction()}"/>
© www.soinside.com 2019 - 2024. All rights reserved.