4 Ukázková aplikace


Jako ukázku práce s použitými technologiemi se pokusím projít část aplikace, jíž jsem spoluřešitelem. Tuto aplikaci vyvíjím pomocí nástroje Sun Java Studio Creator s interně distribuovanými knihovnami komponent a balíčkem ICEfaces, jedná se tedy o předposlední výše uvedenou strategii vývoje – „Použití knihoven Java Scriptu“.

4.1 Prostředí nástroje Sun Java Studio Creator

Sun Java Studio Creator (konkrétně mnou požívaná verze 2 update 1) je velice komfortní RAD (Rapid Application Development) vývojové prostředí pro vývoj webových aplikací založených na technologii JSF. Prostředí je velice intuitivní, skládá se z hlavního editačního okna a roletek s komponentami vlevo a menu s vlastnostmi vložených komponent vpravo; každá editovaná webová stránka má tři režimy editace: jednak design mód, kdy je zobrazena mřížka, na kterou jsou ukotvovány jednotlivé komponenty, druhak JSP kód editované stránky, kde je možné ručně upravovat JSF tagy a v neposlední řadě mód umožňující editaci Javového zdrojového kódu příslušného backing beanu.
Součástí distribuce je i Sun Java System Application Server, já však jako webový kontejner využíval Apache Tomcat, kam stačilo nahrát distribuční adresářovou strukturu projektu (případně vytvořený .war archiv, který Java Studio Creator umí rovněž vytvořit).

Free Image Hosting at www.ImageShack.us

Obr.5: Prostředí Sun Java Studio Creatoru

 

4.2 ICEfaces – Objekt Tree

Při vytváření aplikace jsem využil aplikační framework ICEfaces, jehož knihovny tagů je možné importovat přímo do Java Studio Creatoru (na Obr.5 je vidět část komponent v okně Palette).
V této části práce bych se chtěl zmínit především o dynamicky generované adresářové struktuře, která využívá komponentu ICEfaces – Tree.
Požadavkem bylo zobrazit stromovou strukturu adresářů pouze do úrovně, kterou má uživatel otevřenou jako nejnižší. Struktura každého dalšího otevíraného adresáře musí být načtena v reálném čase přímo ze serveru a to bez nutnosti znovunačtení stránky, případně změně / uzavření jiných větví stromu.

4.2.1 Vytvoření BackingBeans

Jak jsem uvedl výše, použil jsem komponentu Tree. Každá větev tohoto stromu je objekt (TreeObject), který rozšiřuje třídu IceUserObject. Tato třída je zodpovědná za vytváření, mazání a kopírování sebe sama, zároveň drží některé informace o svém předku a v mé implementaci objekt s informacemi o adresáři, příznak rozbalení větve a příznak ooznačení.
Tyto větve jsou uloženy v TreeBeanu, což je upravený SessionBean. V tomto Beanu je zároveň definován objekt DefaultTreeModel, což je proměnná, na kterou je navázána komponenta Tree.

 

<managed-bean>
<managed-bean-name>tree</managed-bean-name>
<managed-bean-class>icefacewebapplication1.TreeBean</managedbean-
class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

Tab. XXII: Definice beanu

 

Strom je vytvářen v Session Beanu, kde je objekt TreeBeanu definován a naplněn. Nejprve je načtena částečná adresářová struktura – kořen adresářového stromu a bezprostřední podadresáře – z databáze, potom jsou tato data postupně vkládána do vytvořeného stromu.

 

 

// vytvoreni roota a nacteni bezprostrednich podadresaru
Directory rootDir = thcSession.tHCClassFactory.getRoot();
this.directoryTreeBean.RenameRoot(rootDir);
List rootSubdirs = rootDir.getSubDirectories();
// vytvoreni bezprostrednich podadresaru roota
Directory tempDir;
for(int i = 0; i < rootSubdirs.size(); i++){
tempDir = (Directory)rootSubdirs.get(i);
this.directoryTreeBean.getRootTreeNode(). add(this.directoryTreeBean.CreateNode(tempDir));
}

Tab. XXIII: Vytvoření kořenového adresáře a bezprostředních podadresářů

Stejným způsobem jsou vytvářeny i všechny další podadresáře, ovšem pouze v případě klepnutí na konkrétní větev (a nenastaveného příznaku Explored).

4.2.2 Vytvoření komponenty a její napojení

Komponenta Tree je přímo napojena na DefaultTreeModel, což je objekt definovaný v TreeBeanu a předáván skrze BackingBean zobrazované stránky – Page1.jsp.

Free Image Hosting at www.ImageShack.us

Obr.6: Napojení komponenty na proměnnou s daty – dialog

<ice:tree binding="#{Page1.tree1}" id="tree1"
value="#{Page1.tree1Model}" var="item">

</ice:tree>

Tab. XXIV: Napojení komponenty na datový model – zápis v JSP

V takto nadefinovaném těle stromu jsou umístěny jednotlivé položky, treeNodes. A sice se jedná o grafickou ikonku se složkou (graphicImage) a text s názvem adresáře, což je vlastně odkaz (ovšem negenerující žádný case identifikátor pro navigační strom) – commandLink – který má definovánu jednak akci, při které jsou vytvářeny příslušné další větve (SessionBean1.nodeClicked) a jednak actionListener, jehož obslužná rutina je přímo v konkrétním objektu – TreeObject, který je volaný ještě před voláním vlastní akce, a v podstatě nedělá nic jiného, než nastaví v Session Beanu danou větev jako aktivní (přímo v Session Beanu se tato akce provést nedá).

 

<ice:treeNode binding="#{Page1.treeNode1}" id="treeNode1">
<f:facet name="icon">
<ice:panelGroup binding="#{Page1.panelGroup1}" id="panelGroup1">
<ice:graphicImage binding="#{Page1.graphicImage1}"
id="graphicImage1" value="#{item.userObject.icon}"/>
</ice:panelGroup>
</f:facet>
<f:facet name="content">
<ice:panelGroup>
<ice:commandLink action="#{SessionBean1.nodeClicked}"
actionListener="#{item.userObject.nodeClicked}"
binding="#{Page1.commandLink1}" id="commandLink1"
value="#{item.userObject.text}"/>
</ice:panelGroup>
</f:facet>
</ice:treeNode>

Tab. XXV: Definice větve stromu

Daný action Listener je metoda třídy TreeObject, která jako parametr vyžaduje předaný objekt ActionListener, který je při klepnutí na odkaz generován.

public void nodeClicked(ActionEvent event) {
treeBean.setSelectedNodeObject(this);
}

Tab. XXVI: Metoda volaná při stisku tlačítka – Action Listener

Stejně tak je definovaná metoda akce, ovšem tato je ve tříde SessionBean, nemá žádné parametry a vrací typ string, což je case identifikátor pro navigační strom, tedy v mém případě vrací null.

public String nodeClicked() {
// Jestlize jeste neni vetev prozkoumana…
if(!directoryTreeBean.getSelectedNodeObject().isNodeExplored()){
// Nacteni podadresaru vybraneho adresare z databaze

// vytvoreni bezprostrednich vetvi ve stromu

}
return null;
}

Tab. XXVII: Metoda volaná při stisku tlačítka – Action

 

4.3 Zhodnocení projektu

Projekt vytvářený v Java Studio Creatoru je možné vytvořit doslova několika klepnutími myši. Komponenty je možné vkládat pomocí myši, většina kódu je generována automaticky, stejně tak proměnné pro beany – vkládají se pomocí kontextového menu, gettery a settery jsou generovány automaticky.
Troufám si říci, je Java Studio Creator je silný nástroj pro tvorbu aplikací založených na JSF, před který je velice rychle pochopitelný i pro člověka, který se s touto technologií nikdy nesetkal a který neovládá ani jazyk Java. Velice rychle se s ním naučí pracovat a stejně tak rychle pronikne i do jazyka Java.

Free Image Hosting at www.ImageShack.us

Obr.7:Výsledná podoba komponenty – nerozbalený a rozbalený strom

 


Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *