JSF, node drzewa jako link

0

Witam,

Stworzyłem drzewko wyciągjące ładnie dane z bazki danych

try {

Integer currentProjId = new Integer(-1);
int nbrChildren = Page1.palltree.getChildCount();

    if (nbrChildren==0){

        List outerChildren = Page1.palltree.getChildren();
        outerChildren.clear();
        List innerChildren = null;
        Page1.drzewoRS.refreshRow();
        boolean hasNext = Page1.drzewoRS.isFirst();
        while (hasNext){
            Integer newProjId = (Integer)Page1.drzewoRS.getInt("idProjekt");
            if (!newProjId.equals(currentProjId)){
                currentProjId = newProjId;
                TreeNode ProjNode = new TreeNode();
                ProjNode.setId("Projekt" + newProjId.toString());
                ProjNode.setText(
                        (String)Page1.drzewoRS.getString("Nazwa")
                        );
                ProjNode.setExpanded(newProjId.equals(rozProjId));
                outerChildren.add(ProjNode);
                innerChildren = ProjNode.getChildren();

            }

        //// DRUGI WĘZEŁ
            TreeNode kandNode = new TreeNode();
            kandNode.setId("Kandydat" + Page1.drzewoRS.getInt("idKandydat"));
            kandNode.setText(Page1.drzewoRS.getString("Nazwisko"));
            innerChildren.add(kandNode);
            hasNext = Page1.drzewoRS.next();
        }


    }

} catch (Exception ex){

} 

Chciałbym jednak aby po kliknięciu na node'a otwierało się nowe okno i jednocześnie został pobrany id reordu w bazie który "tworzy" dany node. Kompletnie nie mam pomysłu jak się do tego zabrać. Myślałem nad metodami getSetlected() w celu pobrania id, nie wiem jednak jak podlinkować automatycznie generowaną gałąź do docelowej strony. Robił już ktoś coś takiego ?

0

Nie bardzo rozumie co masz namysli z tym podlinkowaniem automatycznie galazi do generowanej strony? Masz juz jakis komponent (facelet), ktory ci te drzewo generuje? Mozesz skorzystac z Tomahawk (sam tego nie uzywalem jeszcze) jesli uzywasz Myfaces implemnetacji (tu masz liste dostepnych komponentow http://myfaces.apache.org/tomahawk-project/tomahawk20/tlddoc/index.html). IceFaces, Richfaces, PrimeFaces oferuja ci tez miedzy innymi komponent - tree. Potrzebujesz tylko to tego odpowiedni tree model i reszta latwo sie wygeneruje. Pytanie jest czy oplaca sie uzyc tych rozbudowanych frameworkow tylko do jednej rzeczy. Mozesz napisac to tez sam, najlepiej jako np. composite component. Masz juz cos napisane?

0

Okej może rzeczywiście napisałem to mało po polsku :) Późno było.

Tak drzewo mam wygenerowane, używam komponentu com.sun.webui.jsf.component.Tree, dane pobierane są z bazy danych. Drzewo ładnie się generuje, wszytko działa tak jakbym tego chciał.

Fragmenty kodu JSP odpowiadającego za drzewo wygląda następująco :

 
<webuijsf:tree binding="#{Page1.palltree}" clientSide="true" id="palltree"
                                                    style="border-style: outset; height: 382px; left: 24px; top: 24px; position: absolute; width: 406px" text="Wszytskie projekty"/>

Na czym polega mój problem ? Chciałbym aby po kliknięciu konkretnego węzła w drzewie otwierała się nowa strona z wszystkimi danymi dotyczącymi tego węzła. Dane oczywiście pobiorę z bazy. W skrócie chodzi mi o to aby wygenerowany węzeł był jednocześnie linkiem do nowej strony.

0

Z góry sory za post pod postem, ale jest mały postęp :). Udało mi się podlinkować stronę i było to w sumie banalne. Wystarczyło dodać "nazwaWezla".setURL("link") i poszło teraz siedzę nad pobranie danych z klikniętego węzła. Podpiąłem ActionEcpression :

<code = java> kandNode.setActionExpression(drzewo.SsijDane());

 


<code = java>  
static public MethodExpression  SsijDane()
 {
      String cos=palltree.getSelected();
      KartaProjektu.testowa.setText(cos);

      return null;
 };

Niestety jednak, getSelected nie pobiera żadnych wartości. Sam Action działa, przetestowane.

Widziałem IceFaces ale nie chciałbym tego wciągać w program, szczególnie że już jestem tak blisko celu. MA ktoś jakiś pomysł ? Drzewo na chwilę obecną wygląda następująco :

 public void rysujdrzewoall(){


Integer rozProjId = getRequestBean1().getProjId();

try {

Integer currentProjId = new Integer(-1);
int nbrChildren = Page1.palltree.getChildCount();

    if (nbrChildren==0){

        List outerChildren = Page1.palltree.getChildren();
        outerChildren.clear();
        List innerChildren = null;
        Page1.drzewoRS.refreshRow();
        boolean hasNext = Page1.drzewoRS.isFirst();
        while (hasNext){
            Integer newProjId = (Integer)Page1.drzewoRS.getInt("idprojekt");
            if (!newProjId.equals(currentProjId)){
                currentProjId = newProjId;
                TreeNode ProjNode = new TreeNode();
                ProjNode.setId("projety" + newProjId.toString());
                ProjNode.setText(
                        (String)Page1.drzewoRS.getString("Nazwa")
                        );
                ProjNode.setUrl("faces/KartaProjektu.jsp");

                ProjNode.setExpanded(newProjId.equals(rozProjId));
                outerChildren.add(ProjNode);
                innerChildren = ProjNode.getChildren();

            }

        //// DRUGI WĘZEŁ

            TreeNode kandNode = new TreeNode();
            kandNode.setId("K"+Page1.drzewoRS.getInt("idkandydat"));
            kandNode.setText(Page1.drzewoRS.getString("Nazwisko"));
            kandNode.setUrl("faces/KartaProjektu.jsp");
            kandNode.setActionExpression(drzewo.SsijDane());
           innerChildren.add(kandNode);
            hasNext = Page1.drzewoRS.next();
        }


    }

} catch (Exception ex){

}
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1