giovedì 31 maggio 2012

Utilizzo della funzionalità di Console per Javascript con Internet Explorer

Ciao a tutti,
è da tempo che non aggiorno il blog con le novità scoperte in questo lungo periodo di assenza (preso troppo dal lavoro e da altro).
Oggi volevo proporvi quanto scoperto di recente (solo perché ho avuto la necessità di capire come agevolare il compito di debug javascriptiano) :)

La necessità incontrata era quella di poter visualizzare il contenuto di alcune stringhe presenti in un array javascript senza dover necessariamente eseguire il debug dei vari strumenti di sviluppo a supporto dei browser (vedi firebug, ie developer).
Per venire incontro a questa necessità ho visto che esiste il comando "console" per javascript che in base a come viene utilizzato , permette di stampare su console appunto lo stream di output richiesto !

Attualmente sviluppo su IE8 e pertanto vi mostro come fare ad utilizzare questa funzione con IE Developer:
1) Atterrare nella pagina che necessita di debug
2) Aprire IE Developer
3) Selezionare tab "Script"
4) Selezionare nella finestra di sinistra il tab "Console"
5) Nella funzione javascript presente nella proprio pagina, inserire il seguente codice :
     - console.log("CIAO");

Vedrete comparire CIAO nella console aperta di IE Developer.

Esistono diversi modi di utilizzare la console, qui di seguito elenco quanto trovato in rete :
- console.log("ciao"); --> il .log accetta in input uno o più parametri

- console.info("ciao"); --> come log, ma mostra un'icona associata al livello info

- console.warn("warn"); --> come log, ma mostra un'icona associata al livello warn

- console.error("error");  --> come log, ma mostra un'icona associata al livello error

- console.assert(false,"assert fail"); --> mostra un messaggio oppure il contenuto di un oggetto se l'espressione iniziale è false

- console.dir(object) -->metodo che permette di visualizzare diverse informazioni sull'oggetto passato in input


Tutte queste informazioni sono reperibili facilmente in rete :)
Scriverle qui serve anche a me come reminder in caso di necessità future ^_^

Buona giornata a tutti.

Ciaooooooooooooooooooooooo

lunedì 27 giugno 2011

Come stampare un file pdf lato client

Buongiorno a tutti,
sono mancato per un po' di giorni, ma ho avuto alcuni impegni ultimamente.
Impegni che mi hanno permesso di decidere del mio futuro lavorativo e di farmi un'idea abbastanza ampia delle richieste di mercato in ambito informatico, ma anche di come le diverse società posso decidere di far affrontare i colloqui.

Detto ciò (e dopo aver preso una decisione...che come mi son sempre detto, è giusta a prescindere!), oggi volevo rendervi partecipi (così ne approfitto per ricordare quanto fatto anche in futuro) di come poter stampare un file pdf lato client.

Per effettuare tale operazione, si necessita di quanto segue :
1) creare un iframe nascosto all'interno della pagina ove si vuol rendere disponibile il tasto STAMPA

2) creare ovviamente un evento associato al tasto STAMPA ove richiamare (tramite la corretta valorizzazione dell'src dell'iframe nascosto) una servlet predisposta ad inviare il flusso dati necessario per la stampa stessa

3) Creare la servlet di stampa, utilizzando il seguente codice (la libreria di appoggio utilizzata è iText)

public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException{
response.setContentType("application/pdf");
/* Questa parte può essere utile se il pdf è stato salvato su db\repository\altro
String idPdf = request.getParameter("idPdf");
BeanPdf pdf = null;
try {
pdf = Action.caricaPdfID(idPdf);
} catch (Exception e) {
e.printStackTrace();
}
*/

//Da qui in poi uso libreria iText per poter stampare il pdf
PdfReader reader = new PdfReader(pdf.getPdf()); //L'oggetto pdf.getPdf() in questo caso mi rappresenta l'oggetto pdf in byte[]
try {
PdfStamper stamper = new PdfStamper(reader,response.getOutputStream());
PdfWriter writer = stamper.getWriter();
writer.addJavaScript("this.print({bUI: true, bSilent: true, bShrinkToFit: true});",false);
writer.addJavaScript("this.closeDoc(true);");
stamper.close();
} catch (DocumentException de) {
de.printStackTrace();
System.err.println("document: " + de.getMessage());
}
}
public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException
{
doGet( request, response );
}

Lo reputo un metodo molto interessante, soprattutto per chi non conosce le peculiarità della libreria iText e il suo possibile utilizzo attraverso un semplice iframe nascosto.

Per oggi è tutto :D

Al prox aggiornamento.

giovedì 9 giugno 2011

Javascript : richiamare funzione attraverso nome del metodo contenuto in un array

Buongiorno a tutti,
stamane ho voglia di scrivere (e di conseguenza ricordare per i posteri :P) un metodo che mi consenta di richiamare delle funzioni javascript , valorizzandone l'input a mio piacimento, senza la necessità di dover riscrivere ogni qual volta fosse necessario il nome del metodo e i parametri necessari.
Và detto che questo metodo è molto comodo soprattutto quando si ha la necessità di richiamare tante funzioni all'interno di uno stesso contesto e con parametri molto simili, così invece di avere tanti if uno dietro l'altro...si ha un solo ciclo for che si occupa di verificare la funzione richiesta e di richiamarla valorizzata correttamente.

Vediamo come fare !

1) Inizializzo array con il nome dei metodi necessari.

/* Array globale contenente il nome delle funzioni da richiamare (che in questo caso sono identiche ai nomi delle rispettive funzioni javascript) */
var arrayFunction = ["funct_1","funct_2","fucnt_3"];

2) Creo il metodo tramite il quale potremo richiamare ,diciamo dinamicamente, la funzione richiesta

/* Funzione che consente di chiamare dinamicamente una funzione javascript con tanto di passaggio di dati dinamici (indipendentemente dalla quantita' di parametri passati) */
function dynamicFunc(){
/* Il primo elemento e' il nome della funzione da richiamare, pertanto shifto avanti di un elemento per ottenere i parametri da passare */
window[Array.prototype.shift.call(arguments)].apply(null,arguments);
}

3) Ciclo l'array finchè non trovo il metodo giusto da richiamare, valorizzandone i parametri.

function caricaMetodoJS(funzioneJs,Param2){
for(i=0;i<arrayFunction .length;i++){
/* Controllo quale sia la funzione richiesta e se risulta presente nell'arrayFunction */
if(arrayFunction [i]==funzioneJs)
/* Come potete vedere vengono passati 3 parametri alla funzione dynamicFunc.
Avremmo potuto passargli anche altri 5-6 parametri, a nostra scelta;
ovvio comunque che il primo parametro necessario è il nome della funzione richiesta, così da rispettare quanto avviene nel metodo dynamicFunc, ove viene preso l'array di argomenti passati, shiftato di uno così da poter utilizzare solo i parametri giusti , senza il nome della funzione richiesta .
*/
dynamicFunc(arrayFunction [i],Param1,Param2);
}
}

Mi è stato molto utile trovare un metodo come questo, soprattutto perchè ho risparmiato moltissime righe di codice e , a mio parere, semplificato una quantità numerosa di metodi che in precedenza necessitavano di tanti if e personalizzazioni particolari.
Ovviamente necessito di uno studio più approfondito riguardo la seguente funzione
-->window[Array.prototype.shift.call(arguments)].apply(null,arguments);
poichè non mi è ancora chiara al 100%; vi (e mi) terrò aggiornati ;)

Alla prossima,
Saluti.

Bertu

mercoledì 8 giugno 2011

L'inizio e la fine...

L'inizio e la fine...

di cosa?
Effettivamente non lo so' neanche io...
può voler dire tutto o nulla...

Una cosa è certa...
ho deciso di realizzare questo blog...con l'intento di poterci scrivere tutto quello che mi passa per la testa...
ma non solo...

Lavorando come programmatore...ogni tanto scopro qualche metodo particolare o finezze varie...che sicuramente dimentico di scrivere da qualche parte...e che col tempo dimentico...

Allora quale posto migliore di questo per poter scrivere anche le piccole idee lavorative (proprio piccole...perché ovviamente molte derivano da una assidua ricerca su internet, come non ammetterlo)!

La giornata odierna è passata...e anche oggi ho imparato qualcosa...
che cosa?

lo saprete solo nel prossimo post...