JSF 2 ja AJAX

Pitkästä aikaa pääsin taas pitämään JSF 2 koulutuksia. Kovasti olen tästä tekniikasta itse pitänyt, siinä on huomattavia parannuksia versioon 1 nähden mutta siltikään ei joudu aikaisempia oppejaan täysin hukkaan heittämään.

Yksi koukuttava uutuus on JSF AJAX moduuli. JSF 1 heikkoutena oli aiemmin että kun se oli täysin serveripuolen ratkaisu, ja vielä korkealla nostetulla abstraktiotasolla, niin AJAX ei oikein istunut kuvaan. Sitä voi scriptata komponenttien sisään mutta Googlen suosima yhden sivun ajax malli ilman navigointia ei oikein onnistu elleivät kontrollit keskustele keskenään niin client kuin server puolellakin.

JSF 2 to the rescue! Nyt löytyy parannettu elinkaarimalli, JavaScript kirjasto AJAX:ia varten, ja myös helppo tag jolla käskyttää JSF kontrolleja JavaScriptin kautta. Näin ollen sivu jolta ei navigoida ollenkaan pois on nyt mahdollinen.

Perusidea on että vaiheet execute (sisältäen muodosta oliomalli sivusta, päivitä sitä lähetetyillä parametreilla, validoi, konvertoi, kopioi tiedot model:eihin, ja suorita koodi) ja render (käy puumalli läpi ja käske kontrolleja generoimaan lopputulokseen tarvittava HTML) on nyt erotettu toisistaan, ja lisäksi tukevat osittaista suoritusta ja renderöintiä. Näin voidaan pähkinänkuoressa sanoa: Suorita kontrolliin a liittyvät vaiheet, ja piirrä kontrolli b. Eli reagoi johonkin eventtiin, ja päivitä joku osa sivua.

Tässä siis klassinen hello world versio tästä:

<h:form>
   <h:inputText id="name" value="#{helloBean.name}"/>
     <h:commandButton value="Greet me">
	 <f:ajax execute="name" render="output" />
     </h:commandButton>
   <h2><h:outputText id="output" value="#{helloBean.greeting}" /></h2>
</h:form>

Eli tuossa käytännössä todetaan: kun painat nappia, suorita kontrolli jonka id on ’name’, ja päivitä kontrolli jonka id on ’output’. Jos haluaa reagoida muihin javascript eventteihin, ylläolevassa voidaan lisätä parametri ’event’. Ja suorittaessa kontrollia ’name’ mekanismi käy siis pistämässä kaikki muuttujat paikalleen, ja ajaa tarvittaessa myös action bindingit. Todellinen voima ei piile napin painalluksen käsittelyssä, vaan muissa javascript eventeissä, mutta sekin voi olla hyödyllinen – esim. taulurakenne jossa on sorttaukseen ja sivutukseen napit jotka eivät navigoi pois sivulta, vaan päivittävät managed bean tilaa ja renderöivät vain taulun uusiksi.

Tässä esimakua aiheesta, jos päädyn leikittelemään asialla lisää kirjoittelen pikkasen hello worldiä kiintoisampia kikkailuja. Näitä on toki jo maailmalla ruodittu, esim. html 5 canvas elementistä saa paketoitua aika kivan komponentin JSF 2 komposiittimallilla.

 

Android 3.0 Honeycomb

Hetken aikaa on jo pitänyt tutkiskella Androidin uusinta versiota. Olen seurannut Androidin voittokulkua mielenkiinnolla – kiintoisa alusta jossa Javalla pääsee käsiksi kaikkiin toimintoihin (no lähes kaikkiin, onhan laitteissa vielä systeemiohjelmointikerros). Alusta on miellyttävä ohjelmoida ja maailmanlaajuisesti markkinaosuus kohisten nousussa. Suomessa.. tilannetta on hieman jarruttanut se, että suurin kotimainen matkapuhelinvalmistaja ei ole Androidiin koskenut, ja monet tykkäävät ostaa kotimaista. Kaikesta huolimatta on alkanut tuttavapiirissä näkymään HTC/Samsung Android jos toinenkin..

Yksi kiintoisa tekijä on pad laitteet, itse omistan iPadin joka on varsin kelpo vekotin, mutta kauhean suljettu ympäristö kuten Applen tapaan kuuluu. Lisäksi sen koodaaminen edellyttäisi Objective C:n opettelua mikä on viimeisten näkemieni käppyröiden mukaan aika marginaalitavaraa ja trendinä laskussa. Android pad laitteet ovat siitä kiintoisa juttu että markkinoilla niillä onkin potentiaalia jopa suomessa lyödä läpi isosti, jolloin android koodin ja sovellusten käytettävyys taas lisääntyisi. Suuremmat ja kauniimmat kosketusnäytöt ja parempi akunkestokaan eivät ole ylenmäärin pahoja ominaisuuksia.

Android padejä on hidastanut kovasti pari pikku asiaa. Yksi nopeustöyssy oli että iPad on todellakin hienosti viimeistelty laite ja nykyisen sukupolven Android padit eivät ole laadullisesti lähelläkään samaa nerokkuutta. Toinen töyssy on siinä että  nykyisissä Android pad-laitteissa jyllää kännyköille optimoitu versio joka alkaa kakkosella. Se on siis suunnitellu kännykän kokoisille näytöille ja siinä ei ole kertakaikkiaan mitään piirteitä jotka hyötyisivät pad laitteen erityispiirteistä.

Tilanne muuttui nyt. Google julkaisi Android 3.0 Honeycomb version joka on nimenomaisesti optimoitu Pad laitteille (mikä olisi hyvä suomennos tälle? Taskutieturi? Läpyskä? Taso? ;). Honeycombia ei ole varsinaisesti saatavanakaan kännyköihin, mutta osia siitä alkaa tulevaisuudessa valumaan paikalleen. Ja jos ymmärsin oikein, tulevaisuudessa tuodaan taas Pad ja kännykkäsarja samaan käyttikseen. Mutta juuri nyt 3.0 on kiinnostava koska se on uusi ja erilainen. Ja sillä voi jo leikkiä.

Käyttöliittymä on pistetty uusiksi: kovakoodattujen nappien sijaan sovelluksilla on ruudun oikeassa ylänurkassa ’action bar’ valikko, jossa on tilanteen mukaan muuttuvia softanäppäimiä.  Selain perustuu tällä kertaa Chromeen, josta on hyötynä mm. toimivuus, tuttu tuntuma, ja se, että se synkkaa myös pc-koneen Chromen kanssa (kuinka moni tiesi että Chrome osaa synkata koneiden välillä kirjanmerkit pilveen? Käsi ylös 😉

Padissä tulee toki vakiovarusteena myös parempi GMail ohjelma, MovieStudio elokuvien editointiin, ja isommassa laitteessa on tottakai vääntöä ja akkuvoimaa enemmän. Kovimpia juttuja on myös Widgettien toiminta Honeycomb ruudulla. Widgetit pelaavat toki nykysukupolven kännyköissäkin hienosti, mutta pad laitteessa on enemmän tilaa leikkiä niillä, ja toisin kuin iPadissä, Honeycombissa ei näy pelkästään ruudukkoa sovellusten ikoneita, vaan Widgetit toimivat kuten Androidissa yleensäkin, eli koossa voi olla variaatiota, ja ennen muuta Widgetit ovat aktiivisia, voivat mm. näyttää emaileja, facebook statuspäivityksiä, kalenteritapaamisia, jne.

Copy-Pasten osalta on muutoksia, ensinnäkin tekstiä valitessa tulee automaattisesti näkyviin toiminnot joita valitulle tekstille voi tehdä, ja toisekseen copy-paste tukee nyt myös dataa, kuten esim. kuvia, sovellusten välillä – ei vain tekstiä kuten tähän asti. Samaan tapaan on toteutettu oma valmis API Drag&Drop tapahtumille, joita aika monet pad applikaatiot hyödyntävätkin.. Drag&Drop on kosketusnäytölle intuitiivinen tapa toimia. Samoin löytyy uusi transformation API 2D ja 3D grafiikoille – vähän kuin köyhänmiehen JavaFX. Sillä voi animoida erilaisia parametreja automaattisesti aikajanalle hyvin pienellä vaivalla.

Itselle tietysti REST hörhönä osui silmään JSONReader/Writer luokat, joskin JSONia nyt käsittelee mitenpäin vain mutta ei lisähelppous ole koskaan pahasta. Sitten on hauskoja rajapintoja kuten Time Lapse tuki kameralle, voit säätää intervallin jolla otetaan kuvia ja näin sinulla on oma spy cam sovellus 😉

Mistä näitä sitten saa? Motorolan Xoom tablet tulee olemaan ensimmäinen, ja eiköhän sekä Samsung sekä HTC pyri tarjoamaan omansa ensi tilassa. Tästä tämä kilpailu todella alkaa ja meikä ainakin hankkii omansa ensi tilassa! 😉

http://www.tietokone.fi/uutiset/motorolan_xoomin_tekniikka_lyo_ipadin_kevyesti#utm_source=rss&utm_medium=rss&utm_campaign=rss

Tietysti.. Jäämme mielenkiinnolla odottamaan myöskin iPad kakkosta 😉