Подпись метода не передана компоненту - PullRequest
0 голосов
/ 14 сентября 2018

Это сводит меня с ума, потому что я делал это раньше без проблем.Я пытаюсь передать метод компоненту, но в итоге получаю NULL.

У меня есть следующий компонент:

<?xml version="1.0" encoding="UTF-8"?>
<ui:component
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:cc="http://xmlns.jcp.org/jsf/composite"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
>

    <cc:interface name="commentsAndDocumentsTemp" displayName="commentsAndDocumentsTemp">
        <cc:attribute name="value" required="true" type="com.my.company.common.component.cmntAndDocs.ICommentsAndDocumentsCV" />
        <cc:attribute name="commentSaveRender" required="false" type="java.lang.Boolean" default="false" />
        <cc:attribute name="commentSaveMethod" required="false"  method-signature="java.lang.Void save()"/>
    </cc:interface>

    <cc:implementation>
        <ui:fragment rendered="#{cc.rendered}">
            <f:event type="javax.faces.event.PreRenderComponentEvent" listener="#{cc.attrs.value.checkMethod(cc.attrs.commentSaveRender, (empty cc.getValueExpression('commentSaveMethod')))}" />
            #{empty cc.getValueExpression('commentSaveMethod')}<br/>
        </ui:fragment>
    </cc:implementation>
</ui:component>

Он находится внутри стандартной страницы XHTML, например:

<tceq_comptest:commentsAndDocumentsTemp
    value="#{testCommentsAndDocsCntlr.cadCV}"
    commentSaveRender="true"
    commentSaveMethod="#{testCommentsAndDocsCntlr.genericListener()}"
/>

Я также попробовал метод, подобный этому:

commentSaveMethod="#{testCommentsAndDocsCntlr.genericListener}"

Контроллер имеет этот метод:

public void genericListener() {
    System.out.println("Hello");
}

И объект атрибута значения имеет этот метод:

public void checkMethod(Boolean saveRender, Boolean emptyMethod) {
    if (saveRender && emptyMethod) {
        System.out.println(emptyMethod);
    }
}

printLn в методе объекта значения записывает значение «true» в журнал, а выходные данные компонента записывают значение «true» на экран, указывая, что атрибут для сигнатуры метода равенпусто.

Я упускаю что-то очень простое, я уверен, но я в тупике.

...