Primefaces Treenode mit Command Link

nico_wagner

Cadet 3rd Year
Registriert
Nov. 2013
Beiträge
59
Hallo ich habe folgendes Problem: Ich habe einen Tree erstellt und würde gerne einige Unterpunkte davon mit einem CommandLink betreiben. Ich habe aber das Problem dass alle Nodes nun CommandLinks sind. Wie kann ich das besser machen?
Evtl ne andere Lösung als Command Link? Es sol nachher so sein, dass wenn ich auf einen Node drücke eine Aktion ausgeführt werden soll. (Zugriff auf eine Datenbank und die Daten in einem Fenster anzeigen uvm...)

Code:
<ui:define name="content">
		<p:panelGrid columns="2" styleClass="tree">
			<h:form>
					<h3 style="margin-top: 0">Tree</h3>
					<p:tree value="#{treeView.root}" var="node" dynamic="true"
						selectionMode="single" style="width: 100%">
						<p:treeNode expandedIcon="ui-icon-folder-open"
							collapsedIcon="ui-icon-folder-collapsed">
							<h:outputText value="#{node}" />
						</p:treeNode>
					</p:tree>


Code:
public class treeView implements Serializable {
     
    private TreeNode root;
     
    @PostConstruct
    public void init() {
        root = new DefaultTreeNode("Root", null);
         
        TreeNode node0 = new DefaultTreeNode("Test0", root);
        TreeNode node1 = new DefaultTreeNode("Test1", root);
        
        node0.getChildren().add(new DefaultTreeNode("Test01"));
        node0.getChildren().add(new DefaultTreeNode("Test02"));
        
        node1.getChildren().add(new DefaultTreeNode("Test11"));
        node1.getChildren().add(new DefaultTreeNode("Test12"));
        node1.getChildren().add(new DefaultTreeNode("Test13"));
    }
 
    public TreeNode getRoot() {
        return root;
    }
}




Kann mir jemand außerdem sagen, wie ich das Ordner offen/zu Symbol bei dem Tree nur bei welchen stehen habe die sich auch aufklappen lassen können?
 
naja ohne jetzt genau zu wissen welche Sprachen du verwendest und welche Methoden du zur Verfügung hast, musst du quasi prüfen ob der entsprechende Knoten Child-Knoten hat
- Wenn ja, aufklappbar
- Wenn nein, dann ist es ein "Blatt" des "Baumes" und somit nicht mehr aufklappbar

Leider weiß ich nicht was du genau machst, auch wenn das oben scheinbar XML ist und unten etwas Java-ähnliches.

EDIT:
Im User Guide 5.1 ab Seite 484, solltest du die Lösung finden (URL ließ sich nicht als Link einfügen, weil nicht auf der Whitelist...)
Primefaces Homepage -> Development -> Documentatiton -> User Guide 5.1, ab S. 484
 
Zuletzt bearbeitet:
Das erste ist xhtml und ich verwende die elemente von Primefaces. Das zweite ist Java mit folgenden imports:
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;
 
Umbel schrieb:
Dein Code stellt doch garkeine Links da?

Oh sehe ich auch gerade. Sry falschen code eingefügt :/

Code:
<ui:define name="content">
		<p:panelGrid columns="2" styleClass="tree">
			<h:form>
					<h3 style="margin-top: 0">Tree</h3>
					<p:tree value="#{treeView.root}" var="node" dynamic="true"
						selectionMode="single" style="width: 100%">
						<p:treeNode expandedIcon="ui-icon-folder-open"
							collapsedIcon="ui-icon-folder-collapsed">
                                                        <p:commandLink id="ajax" actionListener="#{buttonView.buttonAction}" var="node">
							   <h:outputText value="#{node}" />
                                                        </p:commandLink>						
                                                </p:treeNode>
					</p:tree>
 
Ich denke du wirst da mit einfach JSF/Primefaces Elementen nicht weiter kommen, du bräuchtest eine eigene Kompomenten die entweder einen Link oder einfach nur einen Text darstellt.

HTML:
<p:commandLink id="ajax" actionListener="#{buttonView.buttonAction}" var="node">
was willst du eigentlich mit dem var="node" erreichen?
 
Zurück
Oben