Ошибка p:ajax в composite component

266
28 февраля 2017, 15:48

Добрый день! Делаю composite component на jsf с использованием primefaces. Мой компонент:

<composite:interface componentType="com.bean.lazyTreeTable">
    <composite:attribute name="xmlFilePath"/>
</composite:interface>
<composite:implementation>  
    <span id="#{cc.id}" class="ltt-mainForm">   
        <h:form prependId="false">
            <f:event listener="#{cc.createTree(cc.attrs.xmlFilePath)}" type="preRenderComponent"/>
            <p:growl styleClass="ltt-messages" showDetail="true" /> 
            <p:commandButton value="Наверх" styleClass="ltt-homeButton"
                icon="ui-icon-carat-1-n" actionListener="#{cc.toHome}"
                update="@(.ltt-treeTable)"
                oncomplete="scrollableUpdate(); scrollToHome();" />
            <p:remoteCommand name="refreshTree" update="@(.ltt-treeTable)"
                actionListener="#{cc.onScroll}"
                oncomplete="scrollableUpdate(); refreshScrollPosition();" />
            <p:remoteCommand name="updateTree" update="@(.ltt-treeTable)"
                oncomplete="scrollableUpdate(); scrollToExpandedNode();" />
            <p:treeTable value="#{cc.root}" var="xmlNode"
                styleClass="ltt-treeTable" id="ltt_treeTable"
                emptyMessage="Не загружен файл для отображения"
                scrollable="true" scrollHeight="500">
                //событие раскрытия узла
                <p:ajax event="expand" listener="#{cc.onNodeExpand}" onstart="setExpandedNode();" oncomplete="updateTree();"/>
                <p:ajax event="collapse" listener="#{cc.onNodeCollapse}" onstart="setExpandedNode();" oncomplete="updateTree();" />
                <f:facet name="header">
                    <h:outputText value="#{cc.xmlFileName}"/>
                    <br />
                    <div class="ltt-searchPanel">
                        <h:outputLabel for="textForSearch" value="Текст для поиска:" style="font-weight:bold" />
                        <p:inputText classStyle="ltt-textForSearch" id="textForSearch" value="#{cc.textForSearch}" 
                            onchange="clearSearchParams();"/>
                        <p:commandButton value="Искать далее" id="searchButton" icon="ui-icon-search" 
                            onclick="searchText();"/>
                        <p:remoteCommand name="searchTextInOtherPages"
                            update="@(.ltt-treeTable), @(.ltt-messages)"
                            actionListener="#{cc.search}"
                            oncomplete="scrollableUpdate(); scrollToSearchedNode();" />
                        <h:inputHidden class="ltt-searchedNodeID" value="#{cc.searchedNodeID}"/>
                    </div>
                </f:facet>
                <p:column headerText="Узел" style="width: 20%">
                    <fieldset class="ltt-textPanel">
                        <div class="ltt-nameValue" >#{xmlNode.name}</div>
                        <div class="ltt-namespaceValue" >#{xmlNode.namespace}</div>
                        <div class="ltt-idValue">#{xmlNode.identifier}</div>
                    </fieldset>
                </p:column>
                <p:column headerText="Атрибуты" style="width: 20%; padding: 0px">
                    <p:dataList value="#{xmlNode.attributes}" var="xmlAttribute"
                        emptyMessage="" styleClass="ltt-attributeList">
                        <table class="ltt-attributeTable">
                            <tr>
                                <td style="width: 30%">
                                    <div class="ltt-textValue">#{xmlAttribute.name}</div>
                                </td>
                                <td>
                                    <div class="ltt-textValue">#{xmlAttribute.value}</div>
                                </td>
                            </tr>
                        </table>
                    </p:dataList>
                </p:column>
                <p:column headerText="Значение">
                    <div class="ltt-textValue">#{xmlNode.value}</div>
                </p:column>
            </p:treeTable>
        </h:form>
    </span>
</composite:implementation>

На сервере обрабатываю раскрытие узла дерева:

public void onNodeExpand(NodeExpandEvent event) throws XMLStreamException {
    TreeNode currentNode = (TreeNode) event.getTreeNode();
    int id = ((XmlNode) currentNode.getData()).getIdentifier();
    root = service.expandOrCollapseNode(id);
}

Получаю currentNode null. Если не использовать composite component, то все работает. Подскажите, где я ошибаюсь.

READ ALSO
Ленивая загрузка объектов (Lazy loading) Java + Spring + JPA + Hibernate

Ленивая загрузка объектов (Lazy loading) Java + Spring + JPA + Hibernate

Нужно сделать ленивую загрузку для объектов, не вызывая orghibernate

423
Парсинг строки Java

Парсинг строки Java

Пример строки:

514
почему панель не выводится на экран

почему панель не выводится на экран

field должен быть добавлен в объект класса JWindow или JFrame, которому необходимо задать границы и включить видимостьСама по себе JPanel отрисовываться...

365
Java: блок внутри функции, его польза

Java: блок внутри функции, его польза

Доброго времени сутокСобственно, вопрос в том, какой практический смысл конструкции, когда выделяется блок внутри метода

228