SCFramewrk QUICK START Dcument per: Dcument: Us Intern SCFQuickStart.dc Data: 06 giu. 04 Autri: Michele Barbagli
I N D I C E SCFRAMEWORK... 1 1. AMBITO... 3 2. STRUMENTI... 4 3. ANALISI DEI PACKAGE... 7 Package it.sintracnsulting.cmmn.taglib... 7 UML Class Diagram... 7 4. STRUTTURA DI UNA APPLICAZIONE... 8 5. SVILUPPO DI UNA APPLICAZIONE... 10 Step principali per l svilupp di una nuva applicazine... 10 Svilupp di una applicazine di gestine cntatti (Rubrica)... 12 APPENDICE A : DIAGRAMMA UML DELLA SCQUERYACTION (ELENCHI)25 SCFramewrk Quick Start
1. AMBITO La cmplessità e difficltà di gestine delle applicazini Java web based, prta alla necessità di individuare una serie di strumenti che facilitin il cmpit dei prgrammatri; esistn numersi tl nell ambit della cmunità pen-surce ma, in quasi tutti i casi, il cst cgnitiv è particlarmente alt. In particlare, è mlt cmplicat valutare la reale validità di tali strumenti ed integrarli insieme all intern di una applicazine. Si è resa pertant necessaria il prgett di un framewrk di integrazine, che frnisca un pattern unic per la realizzazine di applicazini java web-based,che sian in qualche md standardizzate. Prendend spunt dai sftware in cmmerci, il framewrk ha cme biettiv la semplificazine di alcune delle perazini fndamentali nella creazine di una applicazine: Gestine del lgin / lgut Gestine dei Menu Gestine delle stringhe e delle etichette di test in file di risrse esterni alla applicazine Creazine di elenchi paginati cn funzini di ricerca, rdinament, filtr, cancellazine Creazine di frm di inseriment / aggirnament dati; per la gestine dei dati è stat integrat il Layer di persistenza Hibernate ( www.hibernate.rg ) Gestine unificata degli errri Il framewrk inltre, cntiene anche una serie di classi di utilità che permettn di eseguire prcedure cmuni: Cnvertire un file Excel in XML Cnvertire un ram del file system, una JavaBean, una lista di JavaBean in XML Inviare una e-mail in frmat txt html Inviare un Fax attravers web service di Interfax (www.interfax.net) Cntrllare la crrettezza di una email (Interrgand il Server SMTP) Funzini di maniplazine delle stringhe Inviare un SMS attravers il servizi SMS-Web di Mbyt (www.mbyt.it) Interfacciament cn il Jb scheduler Quartz (quartz.surcefrge.rg) Interfacciament cn la SessinFactry di Hibernate (www.hibernate.rg) SCFramewrk Quick Start
2. STRUMENTI Gli strumenti utilizzati, sn stati selezinati tra le vari librerie dispnibili gratuitamente sulla rete; è stat eseguit un lavr di integrazine ed ttimizzazine delle librerie selezinate. Le librerie utilizzate, da intendersi anche cme prerequisit per la piena cmprensine del framewrk, sn: Struts1.1 (http://jakarta.apache.rg/struts) La libreria principale su cui si basa il framewrk Hibernate ( http://www.hibernate.rg ) Strument di bject t relatinal mapping; permette di mappare le tabelle del database su ggetti Java (Per esempi: tabella cntatti ed ggett Cntatt cn un rapprt 1-1 tra le prprietà dell ggett e le clnne della tabella) Dm4j (www.dm4j.rg) Libreria di maniplazine e parsing delle stringhe XML Lg4j ( http://jakarta.apache.rg/lg4j ) Libreria di gestine delle funzinalità di lgging all intern di una applicazine; permette la cnfigurazine esterna del lgging attravers un file di risrse XML JavaMail ( http://java.sun.cm/javamail ) Libreria Java per la gestine della Psta Elettrnica (Invi, Ricezine, Allegati, etc.) XTags (http://jakarta.apache.rg/taglibs ) Tag da inserire all intern delle pagine JSP (Custm Tag) per la maniplazine die file e stringhe XML. Gli strumenti SW utilizzati sn: PstgreSQL ( www.pstgresql.rg ) e driver jdbc ( http://jdbc.pstgresql.rg ) Tmcat ( http://jakarta.apache.rg/tmcat ) Partend dal mdell MVC (Mdel View Cntrl), vediam quali sn gli strumenti utilizzati e le integrazini eseguite nei tre livelli MVC: Mdel: SCFramewrk Quick Start
Per la persistenza dei dati, è stat utilizzat il framewrk Hibernate ( www.hibernate.rg ); per il salvataggi dei dati di un frm su una tabella singla, sn state sviluppate una classe Frm (SCObjectFrm) ed una Actin (SCObjectActin) che permettn di assciare un ggett persistente (un Java Bean che ha gli stessi campi della tabella assciata) ad un ggett frm e di salvare / mdificare / cancellare l ggett e quindi i recrd della tabella assciata; la lettura e gli elenchi vengn gestiti tramite query sql dirette al database e la classe che esegue tali perazini e la SCQueryActin; Cntrl Per la lgica di cntrll del fluss, è stat utilizzat Jakarta Struts, il nt framewrk di Jakarta e ra di Apache per il cntrll del fluss di esecuzine di una applicazine web; http://jakarta.apache.rg/struts/ ; la versine utilizzata, è la 1.1 che permette anche di assciare dei validatri ai frm direttamente all intern di files xml di cnfigurazine; E stata implementata la SCQueryActin per la gestine degli eventi e la SCFilterFrm (la frm assciata) per le ricerche ed i filtri. Tutte le Actin estendn SCAbstractActin e tutte le Frm estendn SCActinFrm. View Struts Taglib (lgic, html, bean) sn state utilizzate le librerie di tag di struts per la gestine della visualizzazine dei messaggi di errre, per la visualizzazine delle stringhe in multilingua, per la generazine dei frm XTags: Per il parsing ed il rendering di stringhe ed elenchi XML Svilupp di custm tag: Sn stati sviluppati dei tag custm per integrarsi cn le funzinalità sviluppate e per perazini cmuni cme la frmattazine di stringhe, il ridimensinament di immagini, ma sprattutt per l integrazine cn i frm (i tag devn leggere il valre dal frm crrispndente che può essere SCFilterFrm SCObjectFrm), la paginazine degli elenchi XML (SCTNavbarTag); Sn state sviluppate anche una serie di classi di Utilità (Package it.sintracnsulting.cmmn.util) e di interfacciament cn Hibernate (Package it.sintracnsulting.cmmn.db, classe SCHibernateUtil) per l access alla cnnessine; SCFramewrk Quick Start
vengn utilizzate le cnnessini di Hibernate per avere un unic punt di access al pl di cnnessini attravers tale framewrk; Le classi di utilità svlgn una serie di perazini cmuni sulle stringhe (SCStringUtil.java), sugli stream XML (SCXMLUtil), sui files (SCFileUtil), l invi della psta (SCEmailUtil); nel package sn presenti inltre alcune classi di che fungn da interfaccia vers Interfax ( il servizi di invi dei Fax www.interfax.net, SCFaxUtil) e vers il servizi di invi / ricezine di SMS (SCSMSUtil vers www.mbyt.it); il servizi di invi SMS utilizza anche un file di cnfigurazine memrizzat nel package it.sintracnsulting.cmmn.cnf ; A tutti i livelli il lgging è gestit attravers la classe SCLg del package it.sintracnsulting.cmmn.lgging che fa us della libreria lg4j. SCFramewrk Quick Start
3. ANALISI DEI PACKAGE Package it.sintracnsulting.cmmn.taglib UML Class Diagram SCFramewrk Quick Start
4. STRUTTURA DI UNA APPLICAZIONE Una applicazine SCF è strutturata cme una applicazine web standard cn la struttura delle cartelle definita nelle specifiche, più alcuni file aggiuntivi peculiari del framewrk. Di seguit, vediam un esempi: web: cntiene le pagine jsp, le immagini, i file html etc., eventualmente strutturati in cartelle e sttcartelle (nell esempi in figura, tutti i file di frnt-end sn all intern della cartella principale) WEB-INF: cntiene i file web.xml e struts-cnfig.xml. WEB-INF/lib: cntiene le librerie java (jar file) necessari al crrett funzinament della applicazine + 2 JAR file cntenenti le classi cmuni (it.sintracnsulting.cmmn) del Framewrk il prim, e le classi Custm sviluppate su misura per la singla applicazine il secnd; questi file, andrann generati all intern della WEB-INF/lib una vlta sviluppata l applicazine. WEB-INF/classes: cntiene SCCnfig.prperties (il file di cnfig. Della applicazine), lg4j.prperties (il file di cnfigurazine di lg4j), hibernate.cfg.xml e Mapping.cfg.xml (i file di cnfigurazine di Hibernate) WEB-INF/xml : cntiene i file xml validatr.xml e validatr-rules.xml cntenenti le cnfigurazini per il Validatr framewrk di Struts. SCFramewrk Quick Start
WEB-INF/tld : cntiene il file TLD cn le definizini delle Tag Library di Struts e di quella sviluppata ad-hc per il Framewrk. SCFramewrk Quick Start
5. SVILUPPO DI UNA APPLICAZIONE Prendiam cme esempi l svilupp di una applicazine di gestine dei cntatti aziendali (sccntact); seguend i vari passi dell svilupp, andrem ad apprfndire le varie caratteristiche e funzinalità del framewrk. Step principali per l svilupp di una nuva applicazine L svilupp di una applicazine tip, dvrà seguire i seguenti passi: 1. Analisi applicativa e studi dei requisiti 2. Prgettazine E-R e schema lgic del database. 3. Realizzazine del database secnd il prgett E-R su PstgreSQL 4. Creazine del prgett su Netbeans Per il prgett, verrà creata una nuva cartella sul cvs nel mdul custm ; il nme della cartella dvrà permettere di identificare il prgett (sccntact) All intern della cartella principale, ci sarann i srgenti delle classi java e le risrse per il prgett, ed una cartella web cntenente i file della applicazine web. I srgenti java, andrann creati nel package it.sintracnsulting.custm.sccntact ; all intern, ci sarà cnf per le risrse, bject per gli ggetti POJO(Plain Old Java Objects) da mappare su Hibernate, struts cn le eventuali estensini delle classi SCQueryActin SCObjectActin per la gestine degli elenchi e delle anagrafiche; per applicazini standard, nn sarà necessari creare azini Struts. 5. Cpia dei file TLD nella cartella WEB-INF/tld; cpia del file web.xml nella cartella WEB-INF; creazine del file struts-cnfig.xml; cpia dei file validatr-rules.xml e creazine del file validatin.xml nella cartella WEB-INF/xml; i file pssn essere cpiati da un altra applicazine (fatel cn attenzine!). 6. Creazine dei file di cnfigurazine del prgett nella cartella WEB-INF/classes: lg4j.prperties: file di cnfigurazine di Lg4j (jgging) hibernate.cfg.xml: file di cnfigurazine di Hibernate (Cnnessine JDBC) Mapping.hbm.xml: cntiene la mappatura degli ggetti java sulle tabelle. SCCnfig.prperties: file di cnfigurazine della applicazine: vi viene definit il datasurce da utilizzare per gli elenchi, il package cntenente gli ggetti persistenti, una eventuale classe di inizializzazine (Implementa l interfaccia PstInit) SCFramewrk Quick Start
7. Creazine del file cntente la definizine delle tabelle virtuali (sccntact.prperties) Il file cn la definizine delle tabelle virtuali (Query SQL per gli elenchi) andrà creat all intern del package it.sintracnsulting.custm.sccntact.cnf ; cnterrà la definizine delle query strutturata cme nell esempi qui stt riprtat. # Cntatti table.cntatti.id=id table.cntatti.fields=* table.cntatti.frm=cntatti table.cntatti.where= table.cntatti.rder= Oltre a quest file di prperties, il package cnf cnterrà anche un file di risrse (sempre un file di prperties) cntenente le stringhe (multilingua) per l applicazine. 8. Creazine dei file JSP e delle eventuali classi, mdifica dell struts-cnfig.xml Creazine del Frameset ; Creazine del menu.xml e della pagina menu.jsp ; Creazine della pagina cntatti.jsp (elenc e cancellazine) e della pagina setcntatti.jsp (Inseriment e Mdifica) ; analg per gruppi.jsp (elenc e cancellazine) e setgruppi.jsp (Inseriment e Mdifica) Eventuale estensine delle classi SCQueryActin e SCObjectActin ; Creazine degli ggetti Java crrispndenti alle tabelle sul database Inseriment della actin cntatti.d e setcntatti.d all intern del file strutscnfig.xml ; 9. Creazine del Cntext all intern di Tmcat Definizine di un nd Cntext nel file server.xml di tmcat Definizine del datasurce principale della applicazine (per la cnnessine al DB) 10. Avvi di Tmcat e test della applicazine SCFramewrk Quick Start
Svilupp di una applicazine di gestine cntatti (Rubrica) Analisi applicativa e studi dei requisiti ( Punt 1) L applicazine dvrà permettere di gestire una anagrafica gruppi, una anagrafica cntatti, e di raggruppare i cntatti secnd i gruppi definiti; i cntatti dvrann essere ricercabili per nme, cgnme, grupp, email; i gruppi dvrann essere ricercabili per nme; gni cntatt, ptrà infine essere assciat ad un sl grupp. Prgettazine E-R (Punt 2) e schema lgic Vediam l schema E-R iptizzat per sddisfare le esigenze della applicazine di gestine cntatti. datacre idutente Id idutente Id titl, nme,cgnme,email, fax,cellulare,telefn nme Gruppi 1:N Cntatti Successivamente andiam a definire l schema lgic del database, cn il dettagli di tutte le tabelle ed i campi. Andrà quindi creat un database sull istanza PstgreSQL; le tabelle vengn create all intern dell schema dev ( per mtivi legati nn legati alla applicazine ). dev.gruppi(id, idutente, nme, datacre) dev.cntatti(id, titl, nme, cgnme, email, telefn, cellulare, fax,.) Realizzazine del database su PstgreSQL ( schema fisic ) Nella tabella di seguit, si riprtan le definizini SQL delle tabelle da creare sul DB; il prefiss dev. Permette di creare le tabelle all intern dell schema dev precedentemente creat. CREATE TABLE dev.gruppi ( id serial NOT NULL, idutente int4, nme varchar(50), datacre timestamptz DEFAULT nw(), CONSTRAINT gruppi_pkey PRIMARY KEY (id) ) WITH OIDS; GRANT ALL ON TABLE dev.gruppi TO admin WITH GRANT OPTION; GRANT ALL ON TABLE dev.gruppi TO sintra; SCFramewrk Quick Start
CREATE TABLE dev.cntatti ( id serial NOT NULL, idgrupp int4, titl varchar(10), nme varchar(40), cgnme varchar(40), ragine varchar(50), indirizz text, cap varchar(5), cmune varchar(50), citta varchar(50), email text, email_uffici text, telefn varchar(30), telefn_uffici varchar(30), telefn_casa varchar(30), cellulare varchar(20), cellulare_uffici varchar(20), fax varchar(30), fax_uffici varchar(30), piva varchar(16), indirizz_uffici text, cap_uffici varchar(5), citta_uffici varchar(50), CONSTRAINT cntatti_pkey PRIMARY KEY (id) ) WITH OIDS; GRANT ALL ON TABLE dev.cntatti TO admin WITH GRANT OPTION; GRANT ALL ON TABLE dev.cntatti TO sintra; Creazine del prgett su Netbeans Andiam a creare il prgett su Netbeans; Mntare la cartella cmmn Creare una appsita cartella custm (sccntact) per i srgenti java; all intern, creare una cartella web per cntenere i file della applicazine web. Cpiare i file.tld in web/web-inf/tld Cpiare i file validatr-rules.xml e validatr.xml in web/web-inf/xml e mdificare se necessari validatr.xml Creare la cartella web/web-inf/lib e cpiare all intern le librerie necessarie. Cpiare il file web/web-inf/web.xml ed apprtare le pprtune mdifiche per adattarl alla nuva applicazine (in generale è necessari mdificare sl la parte relativa ad una eventuale autenticazine REALM) SCFramewrk Quick Start
Cpiare il file web/web-inf/struts-cnfig.xml per pi apprtare le pprtune mdifiche secnd le azini previste; di seguit, il file struts-cnfig.xml: <?xml versin="1.0" encding="iso-8859-1"?> <!DOCTYPE struts-cnfig PUBLIC "-//Apache Sftware Fundatin//DTD Struts Cnfiguratin 1.1//EN" "http://jakarta.apache.rg/struts/dtds/struts-cnfig_1_1.dtd"> <struts-cnfig> <!-- ================================= Frm Beans Definitins --> <frm-beans> <frm-bean name="filterfrm" type="it.sintracnsulting.cmmn.struts.scfilterfrm"/> <frm-bean name="bjectfrm" type="it.sintracnsulting.cmmn.struts.scobjectfrm" /> <frm-bean name="upladfrm" type="it.sintracnsulting.cmmn.struts.scupladfrm" /> </frm-beans> <!-- ================================= Glbal Exceptin Definitins --> <glbal-exceptins> </glbal-exceptins> <!-- =================================== Glbal Frward Definitins --> <glbal-frwards> <frward name="errr" path="/errr.jsp"/> </glbal-frwards> <!-- =================================== Actin Mapping Definitins --> <actin-mappings> <actin path="/cntatti" scpe="sessin" type="it.sintracnsulting.cmmn.struts.scqueryactin" name="filterfrm" validate="true"> <frward name="success" path="/cntatti.jsp"/> </actin> <actin path="/setcntatti" scpe="request" type="it.sintracnsulting.cmmn.struts.scobjectactin" name="bjectfrm" input="/setcntatti.jsp" validate="true"> <frward name="frm" path="/setcntatti.jsp"/> <frwardname="success" path="/cntatti.d?tablename=table.cntatti&actin=filter"/> </actin> <actin path="/gruppi" scpe="sessin" type="it.sintracnsulting.cmmn.struts.scqueryactin" name="filterfrm" validate="true"> <frward name="success" path="/gruppi.jsp"/> </actin> SCFramewrk Quick Start
<actin path="/setgruppi" scpe="request" type="it.sintracnsulting.cmmn.struts.scobjectactin" name="bjectfrm" input="/setgruppi.jsp" validate="true"> <frward name="frm" path="/setgruppi.jsp"/> <frward path="/gruppi.d?tablename=table.gruppi&actin=filter"/> </actin> name="success" --> <!-- Cnfigurazine della dimensine massima per i file in uplad attravers Struts --> <!-- -1 Sta per illimitata; se nn diversamente specificat, il parametr vale -1 <cntrller maxfilesize="2m"> <!-- The "input" parameter n "actin" elements is the name f a lcal r glbal "frward" rather than a mdule-relative path --> <set-prperty prperty="inputfrward" value="true"/> </cntrller> </actin-mappings> <!-- ================================ Message Resurces Cmuni --> <message-resurces parameter="it.sintracnsulting.cmmn.cnf.scfmessages" null="false" /> <!-- ================================ Message Resurces Custm per questa applicazine --> <message-resurces key="sccntact" parameter="it.sintracnsulting.custm.sccntact.cnf.sccmessages" null="false" /> <!-- ================================ Plugins --> <plug-in classname="rg.apache.struts.validatr.validatrplugin"> <set-prperty prperty="pathnames" value="/web-inf/xml/validatr-rules.xml,/web- INF/xml/validatin.xml"/> </plug-in> </struts-cnfig> Creazine dei file di cnfigurazine del prgett nella cartella WEB-INF/classes: lg4j.prperties: file di cnfigurazine di Lg4j (lgging) hibernate.cfg.xml: file di cnfigurazine di Hibernate (Definizine della Cnnessine JDBC per hibernate) <?xml versin='1.0' encding='utf-8'?> <!DOCTYPE hibernate-cnfiguratin PUBLIC "-//Hibernate/Hibernate Cnfiguratin DTD//EN" "http://hibernate.surcefrge.net/hibernate-cnfiguratin-2.0.dtd"> <hibernate-cnfiguratin> <sessin-factry> <prperty name="cnnectin.datasurce">java:cmp/env/jdbc/sccntact</prperty> <prperty name="shw_sql">true</prperty> <prperty name="dialect">net.sf.hibernate.dialect.pstgresqldialect</prperty> <!-- Mapping files --> <mapping resurce="mapping.hbm.xml"/> SCFramewrk Quick Start
</sessin-factry> </hibernate-cnfiguratin> Mapping.hbm.xml: cntiene la mappatura degli ggetti java sulle tabelle attravers Hibernate. <?xml versin="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.surcefrge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <!-- Gruppi --> <class name="it.sintracnsulting.custm.sccntact.bjects.grupp" table="dev.gruppi"> <id name="id" type="lng" clumn="id"> </id> <generatr class="sequence"> </generatr> <param name="sequence">dev.gruppi_id_seq</param> <prperty name="idutente"/> <prperty name="nme"/> <prperty name="datacre"/> <set name="cntatti" inverse="true" lazy="true"> </set> </class> <!-- Cntatti --> <class table="dev.cntatti"> <key clumn="idgrupp"/> <ne-t-many class="it.sintracnsulting.custm.sccntact.bjects.cntatt"/> <id name="id" type="lng" clumn="id"> </id> <generatr class="sequence"> </generatr> name="it.sintracnsulting.custm.sccntact.bjects.cntatt" <param name="sequence">dev.cntatti_id_seq</param> <prperty name="idutente"/> <prperty name="idgrupp"/> <prperty name="titl"/> <prperty name="nme"/> <prperty name="cgnme"/> <prperty name="ragine"/> <prperty name="indirizz"/> <prperty name="cap"/> <prperty name="cmune"/> <prperty name="citta"/> <prperty name="email"/> <prperty name="email_uffici"/> <prperty name="telefn"/> <prperty name="telefn_uffici"/> <prperty name="cellulare"/> <prperty name="cellulare_uffici"/> <prperty name="fax"/> <prperty name="fax_uffici"/> <prperty name="piva"/> SCFramewrk Quick Start
<prperty name="indirizz_uffici"/> <prperty name="cap_uffici"/> <prperty name="citta_uffici"/> <many-t-ne insert="false" update="false" name="grupp" class="it.sintracnsulting.custm.sccntact.bjects.grupp" clumn="idgrupp" /> </class> </hibernate-mapping> SCCnfig.prperties: file di cnfigurazine della applicazine: vi viene definit il datasurce da utilizzare per gli elenchi, il package cntenente gli ggetti persistenti, una eventuale classe di inizializzazine (Implementa l interfaccia PstInit) #Il Datasurce della Applicazine scf.cnfig.datasurce=java:cmp/env/jdbc/sccntact #Il package cntenente gli ggetti OR Mapped scf.cnfig.bjects.package=it.sintracnsulting.custm.sccntact.bjects #Il file di risrse della applicazine cntenente la definizine delle tabelle virtuali scf.custm.cnfig=it.sintracnsulting.custm.sccntact.cnf.sccntact Creazine del file cntente la definizine delle tabelle virtuali (sccntact.prperties) e di un file di risrse per le stringhe multilingua custm di questa applicazine (vedi la riga sttriprtata sull struts-cnfig.xml) <!-- ================================ Message Resurces Custm per questa applicazine --> <! Quest File di Risrse, viene caricat dalla Struts Actin Servlet e può essere recuperat utilizzand il tab <bean> (Es: <bean:message bundle= sccntact key=. />) dve bundle crrispnde al parametr key di cui stt --> <message-resurces key="sccntact" parameter="it.sintracnsulting.custm.sccntact.cnf.sccmessages" null="false" /> e pi di seguit il file sccntact.prperties. # Cntatti table.cntatti.id=id table.cntatti.fields=* table.cntatti.frm=dev.cntatti table.cntatti.where= table.cntatti.rder= # Gruppi table.gruppi.id=id table.gruppi.fields=* table.gruppi.frm=dev.gruppi table.gruppi.where= table.gruppi.rder= # Select Gruppi # Tabella virtuale utilizzata per la visualizzazine dell'elenc dei gruppi # all'intern delle selectbx tableselect.gruppi.id=id tableselect.gruppi.fields=id,nme as value SCFramewrk Quick Start
tableselect.gruppi.frm=dev.gruppi tableselect.gruppi.where= tableselect.gruppi.rder= Creazine dei file JSP e delle eventuali classi, mdifica dell struts-cnfig.xml Creazine del Frameset; <html> <head> <title>gestine Cntatti</title> <meta http-equiv="cntent-type" cntent="text/html; charset=is-8859-1"> </head> <frameset cls="20%,*" cls="*" framespacing="0" framebrder="no" brder="0"> <frame src="menu.jsp" name="menu" scrlling="no" nresize> <frame src="cntatti.d?tablename=table.cntatti" name="main"> </frameset> <nframes><bdy> </bdy></nframes> </html> Creazine del menu.xml e della pagina menu.jsp ; menu.xml <menu> <cntatti> Gestine Cntatti <cnt href="gruppi.d?tablename=table.gruppi"> Gruppi </cnt> <cnt href="cntatti.d?tablename=table.cntatti"> Cntatti </cnt> </cntatti> </menu> menu.jsp <%@ taglib uri="struts/html" prefix="html" %> <%@ taglib uri="scf/cmmn" prefix="scf" %> <html> <head> <link href="<html:rewrite page="/include/scf.css" />" rel="stylesheet" type="text/css"> </head> <bdy> <%/* XMLMenu name = Il nme simblic del menu target = Il target Frame di destinazine (default) labelstyle = l stile SCC per le label icn,icn = le icne di ram apert/chius */%> SCFramewrk Quick Start
<scf:xmlmenu labelstyle="scf_navbar" name="testmenu" target="parent.main" icn="images/fld.gif" icn="images/fldc.gif"> <%@include file="include/menu.xml"%> </scf:xmlmenu> </bdy> </html> Creazine della pagina cntatti.jsp (elenc e cancellazine) e della pagina setcntatti.jsp (Inseriment e Mdifica) ; analg per gruppi.jsp (elenc e cancellazine) e setgruppi.jsp (Inseriment e Mdifica). Gruppi.jsp <%@ taglib uri="struts/bean" prefix="bean" %> <%@ taglib uri="struts/html" prefix="html" %> <%@ taglib uri="struts/lgic" prefix="lgic" %> <%@ taglib uri="scf/cmmn" prefix="scf" %> <%@ taglib uri="scf/xtags" prefix="xt" %> <html> <head> </head> <bdy> <!-- <link rel="stylesheet" href="./include/scf.css" type="text/css"> Visualizzazine Messaggi e/ errri. Message = True sta per i messaggi; l'altr blcc lgic:lgic:messagespresent è per gli errri. I messaggi e gli errri, sn aggiunti alla request all'intern delle azini struts cme ggetti ActinErrr ActinMessage. Vedere la dcumentazine di Struts per ulteriri infrmazini --> <lgic:messagespresent message="true"> <html:messages id="message" message="true"><div class="scf_message"><bean:write name="message"/> </div></html:messages> <hr/> </lgic:messagespresent> <lgic:messagespresent > <html:messages id="message" ><div class="scf_errr"><bean:write name="message"/> </div></html:messages> <hr/> </lgic:messagespresent> <!-- Frm per le ricerche I parametri tablename (Il nme della tabella virtuale) ed actin (L'azine) sn bbligatri. Pssn essere aggiunti + campi di ricerca che vengn tutti messi in and nella Query risultante. --> <html:frm actin="/gruppi" name="filterfrm" type="it.sintracnsulting.cmmn.struts.scfilterfrm"> <scf:input name="tablename" type="hidden" value="table.gruppi"/> <scf:input name="actin" type="hidden" value="filter"/> <div class='scf_label'> <bean:message key="scf.cmmn.fields.display.name"/>: <scf:inputfilter size='10' styleclass='scf_input' name="nme" type="text" datatype="txt" cmparatr="ilk" /> <html:submit styleclass='scf_buttn' >Cerca</html:submit> SCFramewrk Quick Start
</div> </html:frm> <table width="96%" brder="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td> <table width="300" height="21" brder="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" backgrund="./images/sx_b.gif"> </td> <td class="scf_th_tp" ><bean:message bundle="sccntact" key="sccntact.title.grups"/></td> <td class="scf_th_tp" height="21" > </td> <!-- Barra di paginazine In questa fase, in funzine del parametr "pagen"(numer di pagina) vengn selezinate le righe da visualizzare all'intern della pagina --> <scf:xmlnavbar tablename="table.gruppi" actin="gruppi.d" styleclass='scf_label'/> <td width="10" backgrund="./images/dx_b.gif"> </td> </tr> </table> <table width="100%" cellpadding="2" cellspacing="1" class="scf_table"> <tr class="scf_th"> </tr> <th></th> <th>nme</th> <th width='10%'></th> <!-- Impst il clre iniziale della riga; c'è un p' di lgica per implementare l'alternanza dei clri delle righe --> <scf:setattribute name="trclass" value="scf_tr1" scpe="page" /> <!-- --> Definizine del frm per la cancellazine. Quest frm cmprende tutte le righe della pagina cn le relative checkbx utilizzate per recuperare gli "id" degli ggetti da cancellare. <frm name="ddeletefrm" actin='setgruppi.d'> <html:hidden prperty='actin' value='ddelete'/> <html:hidden prperty='bject' value='grupp'/> <!-- Inizi del cicl di scrriment delle righe --> <xt:freach select="//data/rw"> <xt:chse> <xt:when test="$trclass='scf_tr1'"><scf:setattribute name="trclass" value="scf_tr0" scpe="page" /></xt:when> /></xt:therwise> <xt:therwise><scf:setattribute name="trclass" value="scf_tr1" scpe="page" </xt:chse> <tr class="<xt:valueof select="$trclass"/>"> <td width="10%"><a href='setgruppi.d?actin=update&bject=grupp&bjectid=<xt:valueof select="id"/>'>mdifica</a></td> /> <td><xt:valueof select="nme"/></td> <td > </td> SCFramewrk Quick Start <input type="checkbx" name="bjectid" value="<xt:valueof select="id"/>"
</frm> </table> </tr> </xt:freach> <table width="100%" height="21" brder="0" cellpadding="0" cellspacing="0"> <tr> <td width="10" backgrund="./images/bas_sx_b.gif"> </td> <td align="center" class="scf_th_ft"> <!-- Pulsanti di eliminazine ed inseriment di un nuv ggett --> <html:buttn styleclass='scf_buttn' value="nuv" prperty="nuv" nclick="lcatin.href='setgruppi.d?actin=insert&bject=grupp';"/> <html:buttn styleclass='scf_buttn' value="elimina Selezinati" prperty="elimina" nclick="ddeletefrm.submit()"/> </td> <td width="9" backgrund="./images/bas_dx_b.gif"> </td> </tr> </table> </td> </tr> </table> </bdy> </html> Setgruppi.jsp <%@ taglib uri="struts/bean" prefix="bean" %> <%@ taglib uri="struts/html" prefix="html" %> <%@ taglib uri="struts/lgic" prefix="lgic" %> <%@ taglib uri="scf/cmmn" prefix="scf" %> <%@ taglib uri="scf/xtags" prefix="xt" %> <html> <head> </head> <bdy> <link rel="stylesheet" href="./include/scf.css" type="text/css"> <div class='scf_title'> <bean:message bundle="sccntact" key="sccntact.title.managegrups"/> </div> <!-- Visualizzazine di messaggi di errre e nn --> <lgic:messagespresent message="true"> <html:messages id="message" message="true"><div class="scf_message"><bean:write name="message"/> </div></html:messages> <hr/> </lgic:messagespresent> <lgic:messagespresent > <html:messages id="message" ><div class="scf_errr"><bean:write name="message"/> </div></html:messages> <hr/> </lgic:messagespresent> <!-- Frm di inseriment di un grupp --> <center><table> <html:frm actin="/setgruppi" name='bjectfrm' type='it.sintracnsulting.cmmn.struts.scobjectfrm'> <scf:input name="bject" type="hidden"/> <scf:input name="actin" type="hidden"/> <scf:input name="bjectid" type="hidden"/> SCFramewrk Quick Start
<tr> <!-- Si nti il nme del camp di input che inizia cn "db_"; quest indica al framewrk di memrizzare il valre nell'ggett java POJO assciat ed indicat nel parametr "bject" --> <td class="scf_label">nme: </td><td ><scf:input styleclass='scf_input' name="db_nme" type="text" /> </td> </tr> <tr> <td ><input class='scf_buttn' nclick="histry.g(-1)" type='reset' value="<bean:message key="scf.cmmn.fields.display.reset"/>" /> </td> <td class="scf_label"><input class='scf_buttn' type='submit' value="<bean:message key="scf.cmmn.fields.display.submit"/>" /></td> </tr> </html:frm> </table></center> </bdy> </html> Eventuale estensine delle classi SCQueryActin e SCObjectActin ; in quest cas nn necessitan estensini delle pagine di gestine dei cntatti e dei gruppi. Creazine degli ggetti Java crrispndenti alle tabelle sul database All intern del package it.sintracnsulting.custm.sccntact.bjects vann creati gli ggetti Grupp e Cntatt; per mtivi di brevità nn vengn qui riprtati. Inseriment della actin cntatti.d e setcntatti.d all intern del file strutscnfig.xml ; l stess per gruppi.d e setgruppi.d Creazine del Cntext all intern di Tmcat ed avvi dell applicatin Server. <Cntext path="/sccntact" dcbase="c:\java\cvs\java\custm\sccntact\web" debug="9"> <Resurce name="jdbc/sccntact" auth="cntainer" type="javax.sql.datasurce"/> <ResurceParams name="jdbc/sccntact"> <parameter> <name>factry</name> <value>rg.apache.cmmns.dbcp.basicdatasurcefactry</value> </parameter> <parameter> <name>driverclassname</name> <value>rg.pstgresql.driver</value> </parameter> <parameter> <name>url</name> <value>jdbc:pstgresql://lcalhst/scsintra?charset=utf-8</value> </parameter> <parameter> <name>username</name> <value>admin</value> </parameter> <parameter> <name>passwrd</name> <value>admin</value> </parameter> SCFramewrk Quick Start
<parameter> <name>maxactive</name> <value>100</value> </parameter> <parameter> <name>maxidle</name> <value>10</value> </parameter> <parameter> <name>maxwait</name> <value>-1</value> </parameter> <parameter> <name>remveabandned</name> <value>true</value> </parameter> <parameter> <name>remveabandnedtimeut</name> <value>60</value> </parameter> <parameter> <name>lgabandned</name> <value>true</value> </parameter> </ResurceParams> </Cntext> Screensht SCFramewrk Quick Start