首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JSF复合组件中实现回调方法

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

Stack Overflow用户
提问于 2017-02-04 17:47:40
回答 1查看 648关注 0票数 2

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

XHTML部分是:

代码语言:javascript
复制
<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>

后端组件的相关部分为:

代码语言:javascript
复制
@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属性,以及如何执行它?

EN

回答 1

Stack Overflow用户

发布于 2019-10-10 20:57:58

调用不带参数的函数的解决方案(Java 1.8)。

组件:

代码语言:javascript
复制
<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>

视图中的使用情况:

代码语言:javascript
复制
<mycomp:myCC buttonCallback="#{myBackingBean.myCallback}"/>

支持bean中的用法:

代码语言:javascript
复制
private Consumer<Void> myCallback;

@PostConstruct
public void init() {
    myCallback= this::myFunction;
}

public void myFunction(Void v) { //... }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42038861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档