Archive for aprile, 2009
30
apr

Spesso ci si trova a dover eseguire degli script di inizializzazione delle importazioni. In questi casi sono necessarie query SQL anche molto strane e complesse e non mancano quelle di inserimento che prendono parzialmente dati da un’altra tabella (insert into con clausola select). Ad esempio, se abbiamo una tabella prodotto ed una tabella umprodotto (unità di misura del prodotto) e vogliamo popolare quest’ultima con tante righe quanti sono i prodotti assegnando di default l’um presente sul prodotto ed un valore di conversione pari a 1 ecco la soluzione:

insert into umprodotto (idprodotto, idunitadimisura, conversione) select idprodotto, idunitadimisura,  1 from prodotto

30
apr

Quello delle date i JAVA è un problema abbastanza intricato da venirne facilmente fuori. Ecco dunque, per la serie ‘funzioni che possono sempre servire’, un modo per calcolare il numero di ore fra due date e tornarle con una stringa formattata:

/**
* Calcula il numero di ore fra due date.
*
* @param d1    La prima data.
* @param d2    La seconda data.
*
* @return  Numero di ore fra le due date in una stringa formattata hh:mm:ss.
*/
public static String getOreFraDate (java.util.Date d1, java.util.Date d2) {
// scambia le date se ce ne fosse la necessitÃ
if (d1.after(d2)) {
Date swap = d1;
d1 = d2;
d2 = swap;
}
double tempoTotale = d2.getTime() - d1.getTime();
int h = (int)(tempoTotale / (1000 * 60 * 60));
tempoTotale = tempoTotale - (h * 1000 * 60 * 60);
int m = (int)(tempoTotale / (1000 * 60));
tempoTotale = tempoTotale - (m * 1000 * 60);
int s = (int)(tempoTotale / (1000));
return h + ":" + m + ":" + s;
}

,

29
apr

Torniamo ancora sull’argomento Validator di Struts. Purtroppo quello dei numeri e delle date è un campo nel quale la validazione trova molti ostacoli a causa delle diverse convenzioni internazionali. Per poter validare un numero come un buon italiano lo scriverebbe occorre dunque ricorrere a qualche stratagemma e di certo le Espressioni Regolari possono venirci incontro. Per essere più precisi vogliamo validare un qualunque numero nella forma nnn.nnn.nnn,nn come ad esempio 1.230,54. Possiamo dunque usare una espressione regolare come questa:

^[0-9]*[.,]?[0-9]+$

…ed integrarla nel file validation.xml di Struts in questo modo:

<field depends="mask" indexedListProperty="rows" property="speseViaggio">
<arg0 key="label.speseViaggio"/>
<var><var-name>mask</var-name><var-value>^[0-9]*[.,]?[0-9]+$</var-value></var>
</field>

, , ,

28
apr

Oggi mi è capitato di dover recuperare il valore di un campo di una form nel quale è scritto un valore numerico decimale ma usando la virgola come separatore dei decimali (ad esempio 13,6). Dovendo fare dei conti in Javascript su tale valore è stato necessario convertirlo in un numero floating point. Ecco dunque una riga di codice per farlo:

var s = "13,6";
var sFloat = parseFloat(s.replace(/\,/,"."));

,

28
apr

Chi lavora con JAVA sa quanto possa essere complicato gestire le date. Ecco dunque un metodo molto semplice per aggiungere o sottrarre giorni da una data JAVA:

/**
* Aggiungi (sottrai) g (-g) giorni alla data d.
* @param d
* @param g
* @return la nuova data
*/
public static Date addDays(Date d, int g) {
Calendar c = Calendar.getInstance();
c.setTime(d);
c.add(Calendar.DATE, g);
return c.getTime();
}

,

27
apr

Chiunque abbia mai utilizzato Struts ed il suo Validator conosce di certo la potenza di tale mezzo. Mi sono trovato, però, a dover affrontare un problema poco documentato: la validazione dei campi indicizzati (indexed=”true”) di una form, in particolare nel momento in cui ogni riga della form è rappresentata da un proprio bean. La soluzione passa comunque per un paio di accorgimenti e l’indicazione di un attributo. Se ad esempio abbiamo una form rappresentata in questo modo:

<form-bean name="DoProductionProcessForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="cliente" type="java.lang.String"/>
<form-property name="riferimento" type="java.lang.String"/>
<form-property name="righe" type="it.test.controller.form.ProcessRow[]"/>
</form-bean>

La validazione di un campo di ProcessRow (rappresentato dai metodi get/set) come dataInizio potrebbe essere la seguente:

<field depends="required,date" indexedListProperty="righe"  property="dataInizio">
<arg0 key="label.dataInizio"/>
<var><var-name>datePatternStrict</var-name><var-value>dd/MM/yyyy HH:mm:ss</var-value></var>
</field>

, ,

25
apr

In pratica

Chi volesse applicare degli effetti di comparsa e scomparsa di elementi HTML (div) può pensare alla libreria Scriptaculous che offre il metodo toggle della funzione Effect per creare un ingresso a tendina o con apparizione del div che si vuole mostrare o nascondere. L’utilizzo è davvero semplice.

  1. Scaricate le librerie Javascript scriptaculous da scriptaculous e prototype.
  2. Richiamatele nella pagina dove volete applicare l’effetto:
    <script src="javascripts/prototype.js" type="text/javascript"></script>
    <script src="javascripts/scriptaculous.js" type="text/javascript"></script>
  3. Racchiudete l’elemento che volete far sparire e/o comparire in due <div> dando un id univoco al primo:
    <div id="x">
    <div>
    contenunto
    </div>
    </div>
  4. Aggiungete la chiamata alla funzione sull’evento di un elemento che desiderate, ad esempio sull’evento onclick di un tag <a>
    <a href="#"  onclick="Effect.toggle('x', 'slide', { delay: 0.5 });  return false;">Apri dettagli</a>

Tipi di effetti ed opzioni

Per Effect.toggle è prevista la seguente sintassi:
Effect.toggle(element, ['appear' | 'slide' | 'blind'], [options] );

Ecco alcuni esempi:
Effect.toggle('id_of_element', 'appear');
Effect.toggle('id_of_element', 'slide', { delay: 0.5 });
Effect.toggle('id_of_element', 'blind', { duration: 2.0 });

Riferimenti

Primi passi con scriptaculous: http://wiki.github.com/madrobby/scriptaculous
Esempi: http://wiki.github.com/madrobby/scriptaculous/effect-toggle

, , ,