informazioni su: Ariel Techiouba

lunedì 14 marzo 2011

Le stringhe Java e i caratteri speciali


Capita spesso di dover fare il parsing di una stringa in Java, utilizzando come separatori i caratteri speciali. Sono tali, proprio perchè hanno un particolare valore all'interno di espressioni regolari.
Il metodo split() dell'oggetto String prende come argomento proprio una espressione regolare.

Nelle espressioni regolari il carattere " | " (detto "pipe") rappresenta l'operatore "OR". Nel caso volessimo ottenere sottostringhe separate proprio dal carattere | il codice da usare è il seguente:

String source = "testo|da|separare";
String[] parsed_result = source.split("\\|");
for(String s : parsed_result)
{
  System.out.println(s);
}

In tutti i casi in cui volessimo usare un carattere speciale nelle espressioni regolari, è necessario far precedere il carattere da un doppio backslash "\\". 

domenica 13 marzo 2011

Come fare per usare JQuery con le pagine VisualForce Salesforce

 
Questo piccolo tutorial illustra quali sono i passi da seguire per poter utilizzare jquery, insieme con tutti i suoi plugin vari, sulla piattaforma Salesforce.

Il procedimento è abbastanza semplice, grazie alla possibilità di includere Risorse Statiche nelle org di Salesforce. Questa funzionalità infatti permette di caricare foglie di stile, librerie JavaScript e anche file jar (da eseguire dentro applets o Java Web Start) e accederle dentro le proprie pagine create in VisualForce, il linguaggio dinamico proprietario della piattaforma SF.

Ecco i passi da seguire:
  1. Scaricare le librerie occorrenti. Come esempio supponiamo di voler installare jQuery e jQueryUI per usare queste librerie in una pagina VisualForce. Dal sito ufficiale jQuery, scarichiamo l'ultima versione di jQueryUI, scegliendo un tema che faccia al caso nostro. Il file zip conterrà al suo interno la libreria JavaScript di jQueryUI, il core jQuery, e i fogli di stile css necessari alla corretta visualizzazione dei componenti UI che vogliamo utilizzare. Nel mio esempio ho scaricato la versione 1.8 con tutti i componenti e il tema "lightness".
  2. Carichiamo il file zip come Static Resource: Eseguito il login su Salesforce, "Setup > Develop > Static Resources > New" , selezionare il file zip scaricato, e assegnare un nome (nell'esempio "JQueryUI")
  3. Creiamo la pagina VisualForce dove vogliamo usare jQuery. In questo esempio la pagina si chiamerà TestJquery. "Setup > Develop > Pages > New" e assegnare il nome ("TestJquery").
  4. Nella pagina importiamo le librerie contenute nello script: 
    1. Core di jQuery: <apex:includeScript value="{!URLFOR($Resource.JQueryUI, '/js/jquery-1.4.4.min.js')}" />
    2. Estensioni di jQueryUI: <apex:includeScript value="{!URLFOR($Resource.JQueryUI, '/js/jquery-ui-1.8.10.custom.min.js')}" />
    3. Fogli di stile di jQueryUI: <apex:stylesheet value="{!URLFOR($Resource.JQueryUI, '/css/ui-lightness/jquery-ui-1.8.10.custom.css')}" />
  5. Definiamo una variabile per jquery in modo da evitare i possibili conflitti. Infatti Salesforce già utilizza il simbolo $ per alcune librerie proprie. Nel mio esempio ho usato le tre lettere jqr per rappresentarmi le funzioni jquery: var jqr = jQuery.noConflict();
  6. Inseriamo il nostro codice all'interno della pagina VisualForce, per esempio aprendo un dialog: jqr("#dialog").dialog();
  7. Testiamo il codice all'indirizzo /apex/TestJquery
Per comodità riporto l'intero codice della pagina VisualForce TestJquery:

<apex:page>
    <apex:includeScript value="{!URLFOR($Resource.JQueryUI, '/js/jquery-1.4.4.min.js')}" />
    <apex:includeScript value="{!URLFOR($Resource.JQueryUI, '/js/jquery-ui-1.8.10.custom.min.js')}" />
    <apex:stylesheet value="{!URLFOR($Resource.JQueryUI, '/css/ui-lightness/jquery-ui-1.8.10.custom.css')}" />
    <h1>Test di utilizzo di jqeury</h1>
    <p></p>
    <div id="dialog">Questa &egrave; una finestra di dialogo fatta con jQueryUI (tema lightness)</div>
    <script type="text/javascript" language="JavaScript">
        var jqr = jQuery.noConflict();
        jqr("#dialog").dialog();
    </script>

</apex:page>

martedì 1 marzo 2011

Javascript e le date che non funzionano..

Usando Javascript in maniera intensiva è facile incappare in alcune difficoltà che somigliano un po' ai verbi irregolari della lingua inglese. Mi riferisco a particolari aspetti o funzionalità che sono fatte in un determinato modo e vanno prese così come sono, ricordandosi che essi sono "casi speciali".

Un esempio è l'oggetto Date. Per usare le date in Javascript infatti esiste questo oggetto predefinito di grande utilità.
Per riferirsi alla data odierna per esempio è sufficiente istanziare un nuovo oggetto Date:

var today = new Date();

Per mostrarlo a video possiamo semplicemente usare la variabile che invocherà il metodo toString() in automatico:

var today = new Date();
alert(today);

Anche per quanto riguarda le operazioni tra date, l'oggetto predefinito è molto potente e permette di utilizzare gli operatori == , < , > per poter confrontare 2 date distinte:


var today = new Date();
var a_chosen_day = new Date("October 13, 1975 11:13:00");
if(today > a_chosen_day) alert("Oggi e' un giorno successivo alla data scelta");
else alert("Oggi e' un giorno precedente (oppure lo stesso giorno) alla data scelta");

I problemi iniziano quando vogliamo istanziare un nuovo giorno senza passare dalla stringa come nell'esempio. Infatti questa ha il difetto di richiedere la data in lingua inglese ed in un certo formato, mentre l'utilizzo più tipico è quello di usare giorni, mesi e anni per rappresentare una data.

L'oggetto Date contiene 4 costruttori, ognuno utile per determinati scopo, ma l'ultimo sicuramente è quello più generico:

new Date() // imposta la data e l'ora ad oggi, al momento in cui viene invocato
new Date(milliseconds) // millisecondi trascorsi dal 1 gennaio 1970
new Date(dateString) // la stringa deve essere in formato "October 13, 1975 11:13:00" (Month day, Year Hour:Minutes:Seconds)
new Date(year, month, day, hours, minutes, seconds, milliseconds) // tutti i parametri sono opzionali quindi è lecito usare "new Date(1975,10,13)" senza specificare l'ora

L'ultimo costruttore ha però un difetto: la numerazione dei mesi! Infatti mentre gli anni vengono intepretati correttamente (se inserisco 1975, l'anno rappresentato è il 1975) i mesi sono rappresentati da 0 a 11.
Questo comporta che il risultato del seguente codice:

var a_chosen_day = new Date("October 13, 1975 00:00:00");
var another_day = new Date(1975,10,13);
if(another_day == a_chosen_day) alert("Le due date coincidono");
else alert("Le due date sono differenti!");


Risulta questo:

"Le due date sono differenti!"

Per ottenere la stessa data è necessario cambiare il mese di another_day:

var another_day = new Date(1975,9,13);

E' molto importante ricordarsi di questo comportamento particolare, dato che i giorni invece non seguono lo stesso andamento e sono rappresentati con un numero da 1 a 31.