RichFaces rich:tree nodeSelectListener nicht zugehört wird

Ich habe eine rich:tree Komponente verwendet, etwa so:

                    <rich:tree switchType="client" value="#{MyBacking.logTree}"
                    reRender="selectedLog" var="item" nodeFace="#{item.type}"
                    nodeSelectListener="#{MyBacking.processLogSelection}"
                    style="width: 50px;">
                    <rich:treeNode type="folder"
                        icon="/img/logListFolderIconClosed.png"
                        iconLeaf="/img/logListFolderIconOpen.png">
                        <h:outputText value="#{item.name}" />
                    </rich:treeNode>
                    <rich:treeNode type="log" iconLeaf="/img/logFileIcon.png"
                        icon="/img/logFileIcon.png">
                        <h:outputText value="#{item.name}" />
                    </rich:treeNode>
                </rich:tree>

und meine MyBacking processLogSelection () - Methode ist:

    public void processLogSelection(NodeSelectedEvent event) {
    logger.info("In processLogSelection");
    HtmlTree tree = (HtmlTree) event.getComponent();
    nodeTitle = (String) tree.getRowData();
    selectedNodeChildren.clear();
    TreeNode currentNode = tree.getModelTreeNode(tree.getRowKey());
    if (currentNode.isLeaf()){
        selectedNodeChildren.add((String)currentNode.getData());
    } else {
        Iterator<Map.Entry<Object, TreeNode>> it = currentNode.getChildren();
        while (it != null && it.hasNext()) {
            Map.Entry<Object, TreeNode> entry = it.next();
            selectedNodeChildren.add(entry.getValue().getData().toString()); 
            logger.info("selected node: " + entry.getValue().getData().toString());
        }
    }
}

Aber wenn die Seite rendert den Baum (fein) auf einem Knoten highlights der Knoten, aber nichts ist protokolliert, die entweder aus der bean-logger-Aufrufe - die Methode ist nur nicht aufgerufen. Jede Hilfe zu beantworten, warum dies sein könnte, würde sehr geschätzt werden.
Daneben

BEARBEITEN Hinzugefügt vorgeschlagene tags/Vereinfachtes bean-Methode - immer noch nicht erscheinen, um eine Reaktion zu erhalten von der Bohne so weit wie Protokolle gehen:

            <h:panelGrid columns="2" border="0" width="100%" rowClasses="tt">
            <rich:panel styleClass="panelLogTree" header="Log Select">
                <h:form>
                    <rich:tree switchType="client" value="#{MyBacking.logTree}"
                        var="item" nodeFace="#{item.type}" reRender="selectedLog"
                        nodeSelectListener="#{MyBacking.processLogSelection}"
                        ajaxSubmitSelection="true" style="width: 50px;">
                        <rich:treeNode type="folder"
                            icon="/img/logListFolderIconClosed.png"
                            iconLeaf="/img/logListFolderIconOpen.png">
                            <h:outputText value="#{item.name}" />
                        </rich:treeNode>
                        <rich:treeNode type="log" iconLeaf="/img/logFileIcon.png"
                            icon="/img/logFileIcon.png">
                            <h:outputText value="#{item.name}" />
                        </rich:treeNode>
                    </rich:tree>
                </h:form>
            </rich:panel>

            <rich:panel styleClass="panelLogOutput" header="Log Content">
                <h:outputText escape="false"
                    value="Log content: #{MyBacking.nodeTitle}" id="selectedLog" />
            </rich:panel>
        </h:panelGrid>
    </rich:tab>

Hinweis am Ende rich:tab wie dieser Baum-Darstellung in eine Registerkarte aus einer jsp-Datei enthalten. Meine backing-bean-Methode ist jetzt auch:

    public void processLogSelection(NodeSelectedEvent event) {
    logger.info("In processLogSelection");
}

WEITER BEARBEITEN
Interessant, ich dachte, ich würde rip wieder zu einem basic working model. Ich habe den code aus dem RichFaces Demo-Seite. Ich veränderte die faces-config.xml enthalten die SimpleTreeData bean. Ich hatte Probleme beim abrufen der bean-code liest die Daten der Datei in ( simple-tree-data.properties ), so habe ich eine FileReader statt. Dieser baute ok, und ich bekam eine geänderte index.jsp-jsf-Seite, um die Liste der einfachen Baum Beispiel, wie auf der demo-Seite, außer einem Klick auf ein Listenelement hat den Bericht nicht das ausgewählte nodeTitle auf den angegebenen Ort (gleiche problem).

Ich sehe dies entweder als das gleiche problem, die oben erwähnt oder die Tatsache, dass die loadTree Methode in der SimpleTreeData.java bean hat sich geändert. Die In der ändern, entfernte ich die folgenden Zeilen geändert und überflüssigen code entsprechend:

        FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext();
    InputStream dataStream = externalContext.getResourceAsStream(DATA_PATH);

Wie bereits erwähnt, habe ich eine FileReader aber hat jemand denken, dass das problem damit zusammenhängen könnte mich entfernen diese 3 Zeilen? Wie auch oben aufgeführt, meine processLogSelection Methode nicht verwenden getCurrentInstance aber ich bin nicht sicher, es muss, wenn ajaxSubmitSelection="true" aufgeführt ist, in der JSF.

Ratlos.

Haben Sie versucht, ajaxSubmitSelection="true" als Attribut von rich:tree? Ah, und stellen Sie sicher, dass das reichen:Baum ist umgeben von einem Formular.
Danke. Ich habe versucht, beide ohne Erfolg. Ich werde ein bisschen Experimentieren mehr und Bericht erstatten.
ajaxSubmitSelection="true" funktionieren sollte (es funktioniert hier) - überprüfen Sie die Protokolle für, warum es nicht so ist.
Sollte es von Bedeutung, dass die rich:tree ist Teil einer a4j:included Seite?
Ich habe versucht, das verschachteln der obige code in tabpanel und es funktioniert immer noch. Nur ein Scherz, aber sind Sie sicher, dass Ihre Anmeldung funktioniert:)

InformationsquelleAutor volvox | 2010-02-24

Schreibe einen Kommentar