Sei sulla pagina 1di 8

JJ n.

3 marzo-aprile 2007
AJAX e Java: unaccoppiata
vincente
di Luigi Zanderighi
Capire come funziona AJAX non ` e un optional
Luigi Zanderighi
Luigi Zanderighi ` e Inge-
gnere del software
ed ` e esperto nella
progettazione di ar-
chitetture distribuite
e di software java.
pubblicato su
WWW.INFOMEDIA.IT

stampa digitale da
Lulu Enterprises Inc.
stores.lulu.com/infomedia
Infomedia
Infomedia ` e limpresa editoriale che da quasi venti an-
ni ha raccolto la voce dei programmatori, dei sistemi-
sti, dei professionisti, degli studenti, dei ricercatori e dei
professori dinformatica italiani.
Sono pi ` u di 800 gli autori che hanno realizzato per le te-
state Computer Programming, Dev, Login, Visual Basic
Journal e Java Journal, molte migliaia di articoli tecnici,
presentazioni di prodotti, tecnologie, protocolli, strumen-
ti di lavoro, tecniche di sviluppo e semplici trucchi e stra-
tagemmi. Oltre 6 milioni di copie distribuite, trentamila
pagine stampate, fanno di questa impresa la pi` u grande ed
inuente realt` a delleditoria specializzata nel campo della
programmazione e della sistemistica.
In tutti questi anni le riviste Infomedia hanno vissuto del-
la passione di quanti vedono nella programmazione non
solo la propria professione ma unattivit` a vitale e un vero
divertimento.
Nel 2009, Infomedia ` e cambiata radicalmente adottando
un nuovo modello aziendale ed editoriale e si ` e organiz-
zata attorno ad una idea di Impresa Sociale di Comunit` a,
partecipata da programmatori e sistemisti, separando le
attivit` a di gestione dellinformazione gestite da un board
comunitario professionale e quelle di produzione gesti-
te da una impresa strumentale. Questo assetto ` e in linea
con le migliori esperienze internazionali e rende Infome-
dia ancora di pi ` u parte della Comunit` a nazionale degli
sviluppatori di software.
Infomedia ` e media-partner di manifestazioni ed eventi in
ambito informatico, collabora con molti dei pi` u impor-
tanti editori informatici italiani come partner editoriale e
fornitore di servizi di localizzazione in italiano di testi in
lingua inglese.
Limpaginazione automatica di questa rivista ` e realizzata al
100% con strumenti Open Source usando OpenOffice,
Emacs, BHL, LaTeX, Gimp, Inkscape e i linguaggi Lisp,
Python e BASH
For copyright information about the contents of Java
Journal, please see the section Copyright at the end
of each article if exists, otherwise ask authors. Infomedia
contents is 2007 Infomedia and released as Creative
Commons 2.5 BY-NC-ND. Turing Club content is 2007
Turing Club released as Creative Commons 2.5 BY-ND.
Le informazioni di copyright sul contenuto di Java Jour-
nal sono riportate nella sezione Copyright alla ne di
ciascun articolo o vanno richieste direttamente agli au-
tori. Il contenuto Infomedia ` e 2007 Infomedia e rila-
sciato con Licenza Creative Commons 2.5 BY-NC-ND. Il
contenuto Turing Club ` e 2007 Turing Club e rilasciato
con Licenza Creative Commons 2.5 BY-ND. Si applicano
tutte le norme di tutela dei marchi e dei segni distintivi.
`
E in ogni caso ammessa la riproduzione parziale o tota-
le dei testi e delle immagini per scopo didattico purch e
vengano integralmente citati gli autori e la completa
identicazione della testata.
Manoscritti e foto originali, anche se non pubblicati, non
si restituiscono.
Contenuto pubblicitario inferiore al 45%.
La biograa dellautore riportata nellarticolo e sul
sito www.infomedia.it ` e di norma quella disponibi-
le nella stampa dellarticolo o aggiornata a cu-
ra dellautore stesso. Per aggiornarla scrivere a
info@infomedia.it o farlo in autonomia allindirizzo
http://mags.programmers.net/moduli/biograa
-$9$-
RXUQDO
8 h.3 - marzo/aprile 2007
VSHFLDOHAJAX
&DSLUHFRPHIXQ]LRQD$-$;QRQqXQRSWLRQDO
>> di /XLJL=DQGHULJKL(luigi.zahderighi@javajourhal.it)
D
oo mcsi di sccllicismo c cilcssila
su A1AX, avclc inalmcnlc dcciso di
aic il giandc asso c inlioduiic quc-
sla lccnologia allinlcino di un nuovo
iogcllo. Scnza icoccuaivi di comc
unziona il mcccanismo solloslanlc
avclc scaiicalo uno sciil clc a al caso voslio. Ma
oia sudalc icddo. Lc cosc non unzionano. Lo sciil
clc avclc scaiicalo ci qualclc molivo si c iollo c
non saclc dovc mcllcic lc mani. Piima cia scmli-
cc, oia con A1AX in mczzo non si caiscc dovc uo
csscic il iollcma. Cailc clc c giunlo il momcnlo
di aic cio clc avclc cvilalo ino ad oia: caiic comc
unziona A1AX.
A1AX, a dicicnza dcllc allic lccnologic con cui
siamo aliluali a liallaic, non godc di scciiclc
lccniclc: in cclli A1AX non c n un linguaggio n
un iamcwoil, ma dciniscc una lccnica di sviluo
cosliluila da un insicmc di lccnologic.
A1AX signiica lcllcialmcnlc Asynclionous 1ava-
sciil and XML, c nascc dallunionc di H1ML, 1ava-
sciil, dclloggcllo XMLHllRcqucsl (XHR) c di una
o i lccnologic lalo scivci.
Un giosso limilc dcllH1ML c scmic slalo la man-
canza di comunicazionc lia clicnl c scivci. Miciosol
ci iima la aggiialo qucslo iollcma gia nci liow-
sci IL4, con il conliollo AclivcX Miciosol.XMLH11P.
NcllAiilc 2006 il consoizio \3 la iilascialo lc
scciiclc ci loggcllo XHR clc dciniscc lc API clc
oiniscono lc unzionalila di liasciimcnlo dali lia
clicnl c scivci, aicndo cos uicialmcnlc lc oilc
alla inlciocialilila lia clicnl c scivci.
-DYD6FULSW
Il iimo asso ci caiic A1AX c sludiainc lc lccno-
logic alililanli, ossia lc lccnologic clc mcssc insicmc
icndono ossililc sviluaic con la lccnica A1AX.
Pailiamo con dal iuolo di 1avasciil lalo clicnl. Gia
alla inc dcgli anni 90 si accva uso di DH1ML, ma
luso di 1avasciil non la mai liovalo amio con-
scnso ci mancanza di slandaid. Ncgli ullimi lcmi
il divaiio lia lc API c lc unzionalila ocilc dai vaii
liowsci si c nolcvolmcnlc iidolla c oia si uo conla-
ic su un insicmc mollo cslcso di unzioni soviao-
nilili. Qucsla soviaosizionc non c ancoia comlcla
c lulli gli sciil dcvono lcncinc conlo.
La giossa dicicnza, clc la scmic conliaddislinlo
MS Inlcincl Lxloici dagli allii liowsci, c il modo
con cui si iccucia il iiciimcnlo di un clcmcnlo a cui
c slalo asscgnalo un LG allinlcino dcl codicc H1ML,
ossia:
document.getf1ement8y1d{1d)
ouic
document.a11|1d|
Pci masclciaic qucsla divcisila, di solilo si a uso
di uno sciil wiaci clc conlcmla amlcduc lc
icccdcnli nolazioni.
Il iammcnlo clc scguc c un cscmio di codicc 1ava-
sciil in giado di iccuciaic gli clcmcnli indicndcn-
lcmcnlc dal liowsci:
// Iunz1one per recuperare un e1emento da11'1d
funct1on getf1ement{1d) (
var e1ement;
$-$;e-DYD:
uh'accoppiata
vihcehte
-$9$-
RXUQDO
h.3 - marzo/aprile 2007 9
AJAX speciaIe
1f{document.getf1ement8y1d)
e1ement document.getf1ement8y1d{1d);
e1se
e1ement document.a11|1d|;
return e1ement;
)
Qucsla unzionc scivc agli sciil A1AX ci iccuciaic gli
clcmcnli H1ML con cui inlciagiic. uno sciil ajax in gc-
ncic vicnc allivalo a scguilo di un cvcnlo clc si vciiica
nclla agina H1ML (onclicl, onmoucovci,....), cscguc una
iiclicsla al scivci c modiica il codicc HM1L dclla agina
sulla lasc dcl iisullalo ollcnulo.
XMLHttpRequest
Il cuoic di A1AX iisicdc nclloggcllo XHR clc conscnlc ai
clicnl di inlciagiic con il scivci. I mclodi slandaid clc os-
sono csscic invocali su qucslo oggcllo sono quclli dcinili
dallc scciiclc dcl consoizio \3C (/LVWDWR), ossia:
xocn
xscnd
xaloil
xgclAllRcsonscHcadcis
xgclRcsonscHcadci
La cliamala ocn uo csscic cscguila sia in modalila
sinciona (lloccanlc) sia in modalila asinciona c quindi
non lloccanlc. Ncl caso di cliamala asinciona occoiic
gcsliic lcvcnlo di iisosla dcl scivci. Lc cliamalc asincio-
nc vcngono allc icgisliando un (YHQW/LVWHQHU sullcvcnlo
RQUHDG\VWDWHFKDQJH dclloggcllo XHR.
Anclc ci loggcllo XHR occoiic un codicc 1avasciil
ailicolaic ci gaianliic la comalililila con lc vccclic
vcisioni di Lxloici, quando XHR non cia slandaid ma cia
gia laigamcnlc ulilizzalo da Miciosol. Il /LVWDWRiioila
uno dci mcccanismi ci iccuciaic loggcllo XHR anclc
ci lc vccclic vcisioni dci liowsci.
Lato server
Ogni conliollo A1AX ncccssila di una comoncnlc lalo sci-
vci clc dcvc csscic sviluala, anclc quando si vogliono
ulilizzaic scivizi XML gia disonilili sul wcl.
Loggcllo XHR la inalli una limilazionc, imosla ci
molivi di sicuiczza c di iivacy: lc iiclicslc ossono csscic
indiiizzalc solo vciso la URL da cui iovicnc il 1avasciil
clc cscguc la cliamala icmola.
Qucsla limilazionc oila ad una considciazionc imoi-
lanlc: dcvc ncccssaiiamcnlc csscic sviluala una com-
oncnlc scivci, clc dcvc csscic disliiluila sullo slcsso
scivci da cui scaiicalc il 1avasciil. Immaginalc di volci
insciiic nclla voslia agina H1ML un 1avasciil, clc lcggc
liamilc XHR un ccd RSS da una URL cslcina c moslia il
conlcnulo nclla agina. Pci ailo, doviclc sciivcic un o
di codicc lalo scivci clc unga da ioxy nci conionli dcl
ccd cslcino.
Esempio pratico: verifica dinamica dei form
Vcdiamo un cscmio ialico di ulilizzo di A1AX. Lscgui-
icmo la vciiica lalo scivci di un camo di un oim iima
clc vcnga cscguilo il sulmil dcl oim slcsso. Conliolli di
qucslo lio ossono csscic cscguili, ad cscmio, duianlc la
comilazionc dci oim da ailc dcllulcnlc, ci cvidcnziaic
iollcmi nci dali insciili iima clc vcnga icmulo il ul-
sanlc di sulmil, ouic suggcicndo diicllamcnlc i valoii
allcinalivi (niclnamc in uso, cmail gia icgisliala, ccc.).
In qucslo cscmio, vciiicliamo clc la lunglczza dcl va-
loic di un camo insciilo dallulcnlc sia di 5 caiallcii. Sc
la lunglczza dcl lcslo insciilo c 5 caiallcii, mosliiamo una
sliinga di concima, in lulli gli allii casi mosliiamo un
mcssaggio dciioic.
Comc iima cosa dciniamo la sliulluia dcllXML dclla
TABELLA 1 Stati deII'oggetto XMLHttpRequest ricavabiIi daIIa propriet onreadystatechange
9DORUH 6WDWR 'HVFUL]LRQH
0 Uninilializcd Non c slalo ancoia iicliamalo alcun mclodo
1 Ocn L slalo iicliamalo il mclodo ocn() ma non il mclodo scnd()
2 Scnl L slalo iicliamalo anclc il mclodo scnd()
3 Rccciving Vicnc iiccvula la iisosla dcl scivci
4 Loadcd La iisosla c slala inlciamcnlc lclla
AJAX sighifica
letteralmehte
Asyhchrohous
Javascript ahd XM
-$9$-
RXUQDO
h.3 - marzo/aprile 2007 10
speciaIe AJAX
iisosla dcl scivci:
<message><status>$S1A10S</status><text>$1fX1</text></message>
Il iammcnlo XML c mollo scmlicc: con VWDWXVindicliamo
lcsilo dclla vciiica c con WH[Wil mcssaggio cslcso gcncialo
dal scivci.
Oia ciciamo la agina 1SP IRUPMVS in cui insciiamo un
oim con un camo di inul:
<form>
1nser1sc1 testo.
<1nput type"text" 1d"a]ax_f1e1d"
s1ze"20" onh1ur"check{)"/>
</form>
Il ulsanlc di sulmil c la aclion dcl oim sono volulamcnlc
omcssi cicl iiiilcvanli ai ini dcllcscmio.
Occoiic nolaic i scgucnli ailicolaii:
x al camo di inul vicnc asscgnala una unzionc 1a-
vasciil sullazionc RQEOXU, ossia quando vicnc ciso il
uoco
xal camo di inul vicnc asscgnalo un LGci conscnlii-
nc lidcnliicazionc dalla unzionc 1avasciil A1AX.
A qucslo unlo, dolliamo cicaic nclla agina la sczionc
in cui andiamo a insciiic il mcssaggio iodollo dallo sciil
A1AX, comc iisosla dcl scivci. Cio vicnc allo, lanalmcn-
lc, con una sczionc <div> di cui ossiamo maniolainc il
conlcnulo liamilc linvocazionc al mclodo innciH1ML().
Sulilo doo la cliusuia dcl lag <oim> insciiamo il sc-
gucnlc codicc H1ML:
<d1v 1d'a]ax_msg'></d1v>
Anclc qui alliamo asscgnalo un LG ci iccuciaic lclc-
mcnlo dallo sciil. Oia sciiviamo il codicc dclla unzionc
clccl():
funct1on check{)(
Rccuciiamo il valoic insciilo dallulcnlc:
var va1oregetf1ement{'a]ax_f1e1d').va1ue;
Rccuciiamo loggcllo XHR in unzionc dcl liowsci:

var xhr getXML8ttpkequest{);
Rccuciiamo la zona in cui sciivcic il mcssaggio di ajax:
var msg getf1ement{'a]ax_msg');
Lscguiamo la iiclicsla vciso il scivci:
xhr.open{"get","A]axServ1et?va1ue"+escape{va1ore),true);
xil iimo aiamclio indica clc la icqucsl c di lio gcl (i
valoii ammcssi sono gcl/osl),
xil sccondo indica la URL,
x con il lcizo aiamclio indicliamo clc la iiclicsla c
asinciona, quindi non lloccanlc.
Asscgniamo oia una unzionc sul camlio di slalo dclla
icqucsl (la unzionc vciia cliamala anclc quando lo slalo
assa a comlclalo):
xhr.onreadystatechange funct1on{) (
LISTATO 1 Defihiziohe completa dell'ihterfaccia XHF
1nterface XMLNttpkequest
attr1bute LventL1stener onreadystatechanqe,
readonTy attr1bute uns1qned short readyState,
vo1d open{1n DOMStr1nq method, 1n DOMStr1nq urT),
vo1d open{1n DOMStr1nq method, 1n DOMStr1nq urT, 1n booTean async),
vo1d open{1n DOMStr1nq method, 1n DOMStr1nq urT, 1n booTean async, 1n DOMStr1nq user),
vo1d open{1n DOMStr1nq method, 1n DOMStr1nq urT, 1n booTean async, 1n DOMStr1nq user,
1n DOMStr1nq password),
vo1d setkequestNeader{1n DOMStr1nq header, 1n DOMStr1nq vaTue),
vo1d send{),
vo1d send{1n DOMStr1nq data),
vo1d send{1n Document data),
vo1d abort{),
DOMStr1nq qetATTkesponseNeaders{),
DOMStr1nq qetkesponseNeader{1n DOMStr1nq header),
readonTy attr1bute DOMStr1nq response1ext,
readonTy attr1bute Document responseXML,
readonTy attr1bute uns1qned short status,
readonTy attr1bute DOMStr1nq status1ext,
),
)
-$9$-
RXUQDO
h.3 - marzo/aprile 2007 11
AJAX speciaIe
Lo slalo 4 cquivalc al comlclamcnlo dclla iiclicsla al
scivci. Ncl 5LTXDGUR lioviamo lclcnco di lulli gli slali
ossilili ci loggcllo XHR
1f{xhr.readyState 4) (
Sc la iiclicsla al scivci c andala a luon inc, (slalo H11P
200), sciiviamo il codicc H1ML nclla sczionc dcdicala, in
caso di ciioic sciiviamo il codicc dcllciioic H11P c il mcs-
saggio comlclo:
1f{xhr.status 200) (
msg.1nner81ML parse{xhr.responseXML);
)e1se(
msg.1nner81ML "fkk0k "+xhr.status+" - "+xhr.status1ext
)
)
)
Doo avci icgislialo lc unzionc di calllacl ossiamo csc-
guiic la cliamala:
xhr.send{nu11);
Lullimo asso, iima di olci cscguiic qucslo scmlicc
cscmio, c sciivcic il codicc lalo scivci. In una scivlcl clc
maiamo comc /AjaxScivlcl sciiviamo ncl mclodo GR*HW
il codicc dcl /LVWDWR . Il codicc c mollo scmlicc c non
ncccssila di ailicolaii commcnli.
Strumenti e framework
Ncllcscmio clc alliamo vislo ocanzi, alliamo sciillo
sia il codicc clicnl sia il codicc scivci, ailcndo da zcio.
Pci ailo alliamo dovulo soggiaic lc noslic comclcnzc
nci linguaggi H1ML, 1avasciil c 1ava. Lcscmio cia cio
mollo scmlicc: non ci siamo icoccuali di aggiungcic
quci conliolli clc saicllcio indiscnsalili in un amlicnlc
di ioduzionc (ad cscmio: ciioic o mancala iisosla dcl
scivci, limilazionc di acccsso al scivizio XML, ccc.).
Saicllc luona iassi, ci un lavoio allo a icgola dailc,
clc osscio coinvollc lic iguic iocssionali: svilualoic
lalo scivci, svilualoic 1avasciil c giaico sccialisla in
H1ML. Uno sccnaiio di qucslo lio c diicilc clc si icscn-
li, soialullo in Ilalia dovc gli svilualoii sono cliamali a
conosccic qualunquc cosa. Alcuni iamcwoil aiulano ncl-
la icalizzazionc di conliolli c unzionalila A1AX, icndcndo
liasaicnlc allo svilualoic il dialogo clicnl/scivci c la
comoncnlc 1avasciil.
GWT
Il iimo iamcwoil clc vcdiamo c il Googlc \cl 1oollil.
Ulilizzando G\1 ci occucicmmo solo di sciivcic il con-
liollo lalo scivci. Ogni clcmcnlo allivalilc con A1AX
disonc di una classc, clc ossiamo cslcndcic ci oiniic
lc unzionalila clicnl dinamiclc. Ad cscmio disoniamo
LISTATO 2 Fuhziohe Javascript per recuperare l'oggetto XHF
funct1on qetXMLNttpkequest{)
var XNk nuTT,
1f{typeof{XMLNttpkequest) "funct1on" || typeof{XMLNttpkequest) "ob]ect")
XNk new XMLNttpkequest{),
eTse 1f{w1ndow.Act1veXOb]ect)
var cT1entAqent nav1qator.userAqent.toUpperCase{),
1f{browserUtente.1ndexOf{"MS1L 5") < 0)
XNk new Act1veXOb]ect{"MsxmT2.XMLN11"),
eTse
XNk new Act1veXOb]ect{"M1crosoft.XMLN11"),
)
return XNk,
)
La chiamata 'opeh'
pu essere eseguita sia
ih modalit sihcroha
(bloccahte) sia ih
modalit asihcroha e
quihdi hoh bloccahte
-$9$-
RXUQDO
h.3 - marzo/aprile 2007 12
speciaIe AJAX
dclloggcllo Bullon() con lulli i mclodi dcinili in DH1ML
comc ad cscmio onclicl().
1ia lc caiallciisliclc inlcicssanli di G\1 lioviamo un
wizaid da iiga di comando clc gcncia lo sclclclio di una
iima alicazionc c i ilc di iogcllo ci Lclisc. Allia ca-
iallciislica imoilanlc c la ossililila di cscguiic il codicc
in loslcd modc, ossia scnza linlcivcnlo di un liowsci
cslcino, ma ulilizzando un liowsci sccialc clc vicnc oi-
nilo insicmc con il iamcwoil.
Rioilo un llocco di codicc liallo dal silo dcl wclloollil
ci mosliaic la scmlicila dcl codicc:
puh11c c1ass 8e11o 1mp1ements fntryPo1nt (
puh11c vo1d onModu1eLoad{) (
8utton h new 8utton{"f11ck me", new f11ckL1stener{) (
puh11c vo1d onf11ck{W1dget sender) (
W1ndow.a1ert{"8e11o, AJAX");
)
));
kootPane1.get{).add{h);
)
)
JSF
1SI (1avc Scivci Iaccs) lasa la ioiia aiclilclluia sul-
luso di comoncnli. Ogni comoncnlc cscguc il icndciing
di lcan scciici (cliamali EDFNLQJEHDQ). A ogni como-
ncnlc ossono csscic asscgnali dcgli aclionLislcnci su
cvcnli clc si vciiicano sul clicnl su cui vicnc icndciizzalo
il lcan. Laioccio c mollo similc a qucllo adollalo dallc
inlciaccc swing ci la gcslionc dcgli cvcnli.
Qucslo lio di aiclilclluia si c mosliala lciicno mollo
cililc ci lo sviluo di unzionalila A1AX.
In 1SI olci disoiic di unzionalila A1AX signiica avcic
dci comoncnli clc ci cosliuzionc sono in giado cscguiic
lc cliamalc A1AX. In gcncic con 1SI accadc clc, comc ci
i comoncnlc swing, cli svilua ulilizza cio clc liova gia
ionlo, cvcnlualmcnlc con qualclc cslcnsionc. Solo in
casi cccczionali ci si cimcnla nclla sviluo di comoncnli
comlclamcnlc nuovi con lullc lc iollcmaliclc anncssc.
1SI c quindi un ollimo candidalo ci alicazioni clc an-
no uso di A1AX, ma luso di 1SI non c indicc dcllulilizzo
di A1AX. Occoiic liovaic i comoncnli giusli ci disoiic
di conliolli avanzali A1AX.
Alcuni cscmi di comoncnli 1SI/A1AX si ossono liovaic
nclla sandlox di myaccs. 1ia lc cosc inlcicssanli lioviamo
diodown clc si oolano sulla lasc di valoii di allii clc-
mcnli di un oim, suggciimcnli dinamici in asc di digila-
zionc c vciiica dclla validila dci valoii su onllui.
LISTATO 3 La servlet clieht del hostro esempio
r1ntWr1ter out response.qetWr1ter{),
Str1nq text nuTT,
Str1nq coTor nuTT,
1f {request.qetarameter{"vaTue")nuTT || request.qetarameter{"vaTue").equaTs{""))
text"VaTor1zzare 1T campo",
coTor"qrey",
) eTse 1f {request.qetarameter{"vaTue").Tenqth{)5)
text"La Tunqhezza deTTa str1nqa e corretta",
coTor"qreen",
) eTse
text"La Tunqhezza {"+request.qetarameter{"vaTue").Tenqth{)+
") deTTa str1nqa non e corretta",
coTor"red",
)
)
out.pr1nt{"<messaqe<coTor"+coTor+"<]coTor<text"+text+"<]text<]messaqe"),
out.cTose{),
Al campo di ihput
viehe asseghato uh
id per cohsehtirhe
l'idehtificaziohe
-$9$-
RXUQDO
h.3 - marzo/aprile 2007 13
AJAX speciaIe
ECHO2
L iolalilmcnlc quanlo di i comlclo si ossa lio-
vaic oggigioino in 1ava su A1AX. LCHO2 c un wcl
iamcwoil clc disonc di una liliciia mollo comlcla
di comoncnli ci icalizzaic alicazioni con ionlcnd
mollo iiccli c comlcssi. LCHO2 disonc anclc di un
amlicnlc di sviluo visualc avanzalo, in giado di
aiulaic nolcvolmcnlc in asc di sviluo. Lc liliciic di
LCHO2 sono disonilili con liccnzc lgl o ml, mcnlic
lamlicnlc di sviluo c ioiiclaiio. Pci ulilizzaic
LCHO2 non c indiscnsalilc ulilizzaic lamlicnlc vi-
sualc anclc sc si cidono molli dci lcncici dclla ial-
laoima, comc i wizaid c i suggciimcnli.
Gli cscmi icscnli sul silo dcl iodulloic (lll:
//dcmo.ncxla.com) dcsciivono lc olcnzialila dcl ia-
mcwoil mcglio di qualunquc dcsciizionc lcslualc.
Firebug
Uno dci iollcmi di cli svilua con A1AX c moniloiaic
il dialogo clicnl/scivci ci individuaic acilmcnlc dovc
ossono annidaisi cvcnluali iollcmi. Lullimo sliu-
mcnlo clc consiglio c Iiiclug. Si lialla di un lugin
ci Iiicox in giado di inlciccllaic, lia lc allic cosc,
luso dcl oggcllo XHR, mosliando sia la cliamala clc
la iisosla.
ConcIusioni
Sviluaic con la lccnica A1AX conscnlc di icalizzaic vcic
c ioiic alicazioni clicnl. Il liowsci non moslia i
scmlici aginc ma olcnzialmcnlc una singola agina
clc conlinua ad aggioinaisi dinamicamcnlc in unzionc
dcllc inlciazioni con lulcnlc. Pci caiic a ondo lc olcn-
zialila lasla vcdcic Gmail di Googlc, con il suo sislcma di
clal o il nuovo ionlcnd ci la osla di Yaloo!.
A1AX comoila una sciic di conscgucnzc, clc imongono
un allcnlo sludio iima di csscic ulilizzalo indislinlamcnlc.
Lc iimc considciazioni sono sullacccssililila. Una alica-
zionc A1AX saia diicilmcnlc acccssililc da allii sislcmi, in
ailicolaic dai moloii di indicizzazionc. Sili ci i quali c on-
damcnlalc lindicizzazionc o ci i quali c icvislo lacccsso
da allic iallaoimc non dovicllcio aic uso di 1avasciil
c quindi di A1AX. Unallia considciazionc c sulla sicuiczza:
csoiic scivizi wcl c comc mosliaic il ianco al ncmico. Oc-
coiic ulilizzaic lulli gli accoigimcnli ci cvilaic clc allii nc
alusino (ad cscmio con un llocco su icciici) c ci i dali
scnsilili occoiic scmic iolcggcic lacccsso c oiniic i dali
solo in H11PS. Sono accoigimcnli comuni ma scsso liascu-
iali, ci la cicczionc ciiala clc ncssuno conoscc il scivizio
c quindi ncssuno lo cliamcia diicllamcnlc.
Note Biografiche
/XLJL=DQGHULJKLq,QJHJQHUHGHOVRIWZDUHHGqHVSHUWRQHOODSUR
JHWWD]LRQHGLDUFKLWHWWXUHGLVWULEXLWHHGLVRIWZDUH-DYD
Dada $A e ona /n|e|ne| Comany qoo|a|a a//a 0o|sa d/ M//ano
e |esen|e so/ |/nc/a// me|ca|/ /n|e|naz/ona// /eade| ne/ se||o|e de/
se|v/z/ Common/|y ed En|e||a/nmen| {/n|e|ne| Mob//el
// nos||o e on mondo con ona /o||e comonen|e /n|e|naz/ona/e /n co/
on/ d/enden|e e co//abo|a|o|e s/ /den|///ca con /Az/enda on mondo
dove /a ass/one e| /e noove |ecno/o/e con||/bo/sce a/ soccesso
de//Az/enda o/||e che a//a c|esc/|a e|sona/e e |o/ess/ona/e
$/amo conv/n|/ che da/ con/|on|o de//e /dee nascano /e so/oz/on/ /0
b|///an|/ che // |eam-wo|k/n s/a on va/o|e cond/v/so ed ona |ea/|a
qoo|/d/ana |ad/ca|a ne/ /ace|e d/ |ao||a|s/ con // a/||/
A seguito deIIa forte crescita deI nostro business ricerchiamo
SviIuppatori per iI prodotto Dada.net (www.dada.net)
ll cahdidato ideale ha maturato uha sighificativa esperiehza di sviluppo software per il WEB.
Requisiti:
o Formaziohe ih ambito ihformatico o elettrohico
o Buoha cohoscehza della lihgua ihglese
o Comprovata cohoscehza di uho o pi lihguaggi di programmaziohe:
FHF
Ferl
J2ME
HTML, CSS e Javascript
Javascript e Actiohscript
TitoIi preferenziaIi:
Fassiohe per il mohdo lhterhet, le huove techologie, l'ihtegraziohe tra sistemi, lo studio e la realizzaziohe di commuhity dedicate al
mohdo cohsumer dell'ehtertaihmeht (web e mobile).
Completaho il profilo autohomia e spirito d'ihiziativa, oriehtamehto ai risultati e motivaziohe ad ihserirsi ih uh cohtesto giovahe e
molto dihamico.
Sede di Iavoro: Firenze.
Se siete ihteressati ad ihcohtrarci, aspettiamo le vostre cahdidature (Fif.: DEV07) all'ihdirizzo recruitihg@staff.dada.het (autorizzahdo il tratta-
mehto dei dati persohali ai sehsi del D.Lgs. 196/03). Fer approfohdimehti, visitate il hostro sito istituziohale: http://dada.dada.het/it/.