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.
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:include
d 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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchte ich diese facelets-template und diese Beispiel für ein java backing bean und die Methode aufgerufen wurde. Ich nahm an, Sie verwenden die Naht, aber vielleicht bin ich falsch:) vor Einer Weile gab es einige Beschwerden: Naht-forum. Welche version von Richfaces benutzt du und welchen browser? Wenn Sie auch Naht, bitte erzählen Ihre version.
InformationsquelleAutor Petar Minchev
Die Lösung für dieses Problem war die Installation einer facelets-Glas. Sehen hier. Es betraf auch andere Probleme von mir, nicht überraschend.
InformationsquelleAutor volvox