Mattepuffo Non toccatemi PHP!


Oggi voglio esporvi la mie personale teoria su PHP, linguaggio che uso tutti i giorni e del quale non farei mai a meno!

Ma in giro molti lo snobbano e lo shifano, e penso che sia una bella esagerazione.

Come tutti i linguaggi, anche PHP ha i suoi pro e contro; e di certo non è perfetto.

Ma andiamo a vedere quali sono le maggiori critiche che gli vengono mosse:

  • lento rispetto ad altri linguaggi interpretati e compilati
  • inconsistente e caotico

Vi dico la mia su entrambi i punti.

Mattepuffo Usare i template in Java Server Faces


Chi ha programmato almeno una volta in Asp.NET, conosce già il concetto di Master Page; una pagina HTML che funziona da template, nella quale alcuni parti sono dinamiche e altre fisse.

Di base le JSP non prevedono una cosa del genere, a parte il meccanismo degli include (come PHP).

Però se usiamo un framework, e nello specifico JSF, abbiamo la possiblità di usare i template.

Vediamo un semplice esempio; una volta creato il progetto (Netbeans ci permette di includere da subito le librerie che ci servono) create una pagina che chiamiamo template.xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"   
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <h:outputStylesheet name="style.css" library="css" />
    </h:head>
    <h:body>
        <div id="page">
            <div id="header">
                <ui:insert name="header" ></ui:insert>
            </div>
            <div id="content">
                <ui:insert name="content"></ui:insert>
            </div>
            <div id="footer">
                <ui:insert name="footer"></ui:insert>
            </div>
        </div>
    </h:body>
</html>

Come vedete è una semplice pagina con alcuni tag specifici.

Mattepuffo Asp.NET AJAX


Il .NET Framework ha già tutto incluso per usare AJAX senza ricorrere a Javascript.

Di default anche il Web.config è configurato per usarlo; in caso potrete usarlo per cambiare alcune impostazioni.

Vediamo quindi come usare AJAX nelle nostre pagine aspx.

Prima di tutto dobbiamo incorporare un controllo ScriptManager; io consiglio di metterlo nella Master Page in modo da averlo disponibile per qualsiasi pagina:

<asp:ScriptManager ID="scriptManagerDefault" runat="server" />

Tutto qua.

Mattepuffo Asp.NET LinkButton


In una pagina aspx ho un LinkButton con il quale attivo un evento.

La cosa più "problematica" è che devo passare il valore del LinkButton ad un altro componente.

In questo caso non bastano le solite proprietà Value o Text.

Andiamo con ordine; questo il componente nella pagina:

<asp:LinkButton ID="btn_art_singolo" runat="server" OnCommand="go_Click" CommandName='<%# DataBinder.Eval(Container.DataItem, "ARTICOLO") %>'>
   <%# DataBinder.Eval(Container.DataItem, "ARTICOLO") %>
</asp:LinkButton>

Il LinkButton sta dentro a un Repeater e prende il valore in maniera dinamica da database.

Tanto per cominciare no avremo un evento OnClick ma u nevento OnCommand.

Mattepuffo Esportare DataSet in Excel


In un altro articolo ho spiegato come esportare una DataGridView in Excel.

Adesso vediamo come esportare un DataSet direttamente, in modo da renderlo indipendente dal componente dove visualiziamo i dati.

In questo caso, infatti, i dati vengono poi rappresentati su una pagina Asp.NET e il plugin jQuery DataTable, il che rende impossibile esportare i dati direttamente dal componente.

Dobbiamo quindi estrarli direttamente da un DataSet.

Prima di tutto dobbiamo avere un metodo che esegue la connessione e la query; tipo questo:

        public DataSet getSomething()
        {
            connection().Open();
            OdbcCommand cmd = new OdbcCommand();
            OdbcDataAdapter adapter = new OdbcDataAdapter();
            DataSet ds = new DataSet();
            cmd.CommandText = "SELECT * FROM somewhere";
            cmd.Connection = conn;
            adapter.SelectCommand = cmd;
            adapter.Fill(ds);
            ds.Dispose();
            conn.Close();
            return ds;
        }

Semplicemente ritorna un DataSet.