mercoledì, aprile 22, 2009

Il mio nuovo tatuaggio - Prima seduta ...

Ed ecco, come promesso, le prime immagini del lavoro sul mio nuovo tatuaggio!
Quanto son contento :)

Il disegno temporaneo

Prime linee

Che divertimento ... o che dolore? :)

Le linee completate

La prossima seduta c'e' l'ho il 10 Maggio ... per il momento ringrazio tanto Eduardo per il lavoro magnifico che sta facendo ;)

Etichette:


domenica, aprile 19, 2009

Gli array associativi in Javascript ...

Oggi ho proprio voglia di scrivere qualcosa di tecnico.
Alla fin fine per guadagnarmi il pane faccio il programmatore e condividere delle soluzioni puo' essere utile (e questo tutti gli sviluppatori lo sanno!).
Quindi, il problema che dovevo risolvere era questo:

"In una jsp, selezionando un valore da una select bisogna riempirne opportunamente un'altra."

Non sembra la fine del mondo ... uno potrebbe dire: "che ci vuole!"
Ok, ma quando i dati sono dinamici e presi da un DB ... forse non e' cosi' banale.
E poi ad ogni valore della prima select alla seconda sono associati un numero variabile di elementi.
Mi serviva una soluzione semplice ed efficacie, che si potesse dinamicizzare.

Ho risolto il problema con gli array associativi in javascript.

Vediamo prima di tutto cos'e' un array associativo. In javascript si puo' definire cosi':

arrayAssociativo = new Array();
arrayAssociativo["Val1"] = "SubVal1";
arrayAssociativo["Val2"] = "SubVal2";
arrayAssociativo["Val3"] = "SubVal3";

E per recuperare un valore basta usare, ad es: arrayAssociativo["Val1"];

Quindi possiamo appunto "associare" ad una stringa un altro oggetto.

Un altro modo per definire l'array associativo (ed e' quello che preferisco) e' questo:

var arrayAssociativo = {"Val1":"SubVal1", "Val2":"SubVal2", "Val3":"SubVal13};

Molto piu' "professionale" direi :)

Cmq, il trucco sta in questa seconda definizione, infatti (complicando le cose) posso scrivere un array associativo di questo tipo:

var arrayOfValue = [{firstValue: 'Val 1', secondValue: new Array('SubVal 1-1', 'SubVal 1-2', 'SubVal 1-3', 'SubVal 1-4')}, {firstValue: 'Val 2', secondValue: new Array('SubVal 2-1', 'SubVal 2-2')}, {firstValue: 'Val 3', secondValue: new Array('SubVal 3-1', 'SubVal 3-2', 'SubVal 3-3')}];

In pratica ho associato alle stringhe che stanno su firstValue un array semplice sul secondValue.

La funzione javascript che gestisce lo switch dei valori si puo' scrivere cosi':

// Funzione per eseguire lo switch
// I parametri:
// destination - la select di destinazione
// value - il valore della prima select
function fillSelect(destination, value) {

// verifico se e' stata fatta una scelta valida
if(value == undefined || value == "") {
destination.setAttribute('disabled', 'disabled');
return;
}

// svuoto la select
while( destination.childNodes.length >= 1 ) {
destination.removeChild( destination.firstChild );
}

// il primo elemento e' vuoto
destination.options[0] = new Option('', '');

// itero l'array associativo per trovare il valore giusto
var arraySecondValues = [];
for(var j=0; j < arrayOfValue.length; j++) {
if(arrayOfValue[j].firstValue == value) {
arraySecondValues = arrayOfValue[j].secondValue;
break;
} else {
continue;
}
}

// adesso itero l'array recuperato
// con i valori da copiare nella seconda select
for(var i=0; i < arraySecondValues.length; i++) {

// uso "i + 1" perche' ho gia' definito il primo elemento
// della select con uno spazio vuoto
destination.options[i + 1] = new Option(arraySecondValues[i], arraySecondValues[i]);
}

destination.options.length = i + 1;
destination.removeAttribute('disabled');
}

Il codice html:

<form name="testForm" method="post" action="" id="testForm">
Prima select: <br/>
<select name="firstSelect" onchange="fillSelect(document.testForm.secondSelect, this.value);">
<option value=""></option>
<option value="Val 1">Val 1</option>
<option value="Val 2">Val 2</option>
<option value="Val 3">Val 3</option>
</select>
<br/><br/>
Seconda select: <br/>
<select name="secondSelect" disabled="disabled"><option value=""></option></select>
</form>

Ed il gioco e' fatto. L'unica cosa che dobbiamo dinamicizzare nella nostra jsp e' l'array associativo e i dati della prima select. Io ho usato un bean con due liste riempite con i dati presi dal DB per poi utilizzare la funzione JSTL <c:forEach> a dovere.


Per testare il codice:
Prima select:

Seconda select:

Etichette: , , ,


giovedì, aprile 09, 2009

E' vietato attraversare i binari ...

Quante volte ho sentito questa frase in stazione, quante volte l'ho letta sui cartelli.

Eppure c'e' chi le ignora.

Stamattina sono arrivato alla stazione di Roma Tiburtina. Potevano essere le 7.50 circa.
Noto la solita confusione, ma stavolta e' diverso ... le persone sono concentrate sul marciapiede del binario 2 ... con lo sguardo rivolto verso il treno fermo al binario 1.

Polizia, vigili del fuoco e ferrovieri tutti occupati sui binari per cercar di tirar fuori una persona che e' finita sotto il treno ... non credo che sia stato un tentato suicidio ... forse voleva attraversare i binari per far prima ... non lo so.

Non era una bella scena da vedere ...

Aggiornamento: Rosario, nei commenti, mi ha segnalato questo articolo. A quanto pare e' stato un tentato suicidio ... :(

Etichette: , , ,


mercoledì, aprile 08, 2009

Meemi aiuta l'Abruzzo ...

Sono giorni tristi per l'Italia ... quello che e' successo in Abruzzo ha sconvolto tutti.
Non so perche', ma ho l'impressione che la sensibilita' e l'unione del popolo negli anni sia aumentata.

Sono davvero tante le persone che stanno aiutando, ed aiuteranno (ad esempio in prima persona Grizzly, lo ammiro davvero tanto), le persone coinvolte nel terremoto dei giorni scorsi.

Da oggi e' partita su meemi.com un'altra iniziativa, i dettagli sono spiegati in questo meme.

Io partecipo ...

Etichette:


mercoledì, aprile 01, 2009

CADIE ...

CADIE. Il nuovo Pesce d'aprile di google?

Puo' darsi :D

Interessante la data di pubblicazione dell'articolo (vedere immagine) ...





AGGIORNAMENTO (ore 12.11):

Fantastico lo scherzo di YouTube con le istruzioni per il nuovo layout :D

Grazie Capobecchino per la segnalazione (ecco il meme)

Etichette: ,