2009-07-06 3 views
-1

Je souhaite écrire du code réutilisable qui extrait une table HTML d'un fichier JSP et le convertit au format Excel pour être exporté vers l'utilisateur. Je veux profiter de l'objet Table HTML DOM plutôt que d'analyser le code HTML en Java pour extraire les mêmes informations. Le plus grand avantage à cela serait d'inspecter chaque cellule pour les cases à cocher, les boutons, etc. afin de les supprimer avant d'écrire les cellules dans Excel. Dans mon esprit, la configuration irait quelque chose comme ceci:Accès au DOM de la table JavaScript dans un servlet Java

HTML Tableau:

<a href="javascript: export();">Export to Excel</a> 
<table id="exportTable"> 
    ... 
</table> 

JavaScript:

function export() { 
    var table = document.getElementById("exportTable"); 
    // Send table object to Servlet somehow 
} 

Le JavaScript irait dans une sorte de common.js afin que le concept pourrait être utilisé sur n'importe quelle table dans n'importe quelle page du site.

** Mise à jour **

JSPS utiliseront des objets Java pour générer la table, mais la table elle-même sera différent à chaque fois. Je suis à la recherche d'une solution générique permettant d'obtenir la structure DOM de la table, utilisant ainsi les tables.rows et table.cells déjà effectuées, inspecter chaque cellule pour supprimer les tags que je ne veux pas dans Excel (comme les boutons , cases à cocher, etc), et écrire à l'utilisateur avec le type de réponse défini sur Excel. Est-ce que ça fait plus de sens?

+0

Les tables HTML peuvent être interprétées par Excel. Cela dit, tout ce dont vous avez besoin est le balisage et un type de contenu "application/ms-excel" –

+0

Apparemment, vous générez la table dans la JSP, alors pourquoi ne produisez-vous pas simplement les données dont vous créez la Table? Pour l'implémentation JavaScript réelle, jetez un oeil à la fonctionnalité Ajax et la manipulation Dom avec jQuery (http://jquery.com) – Daff

+2

Je ne comprends pas, y a-t-il une question ici? –

Répondre

1

Je sérialiser les données à partir des cellules dans un objet JSON simple, puis utiliser l'un des nombreux JSON libraries disponibles sur le côté Java pour le convertir en un objet utilisable.

Quelque chose comme ceci:

function processTable(tableId) { 
    var jsonTable = []; 
    var tableObj = document.getElementById(tableId); 
    if (tableObj) { 
     for (var x=0, y=tableObj.rows.length; x < y; x++) { 
      var tableRow = tableObj.rows[x]; 
      var jsonRow = []; 
      for (var i=0, j=tableRow.cells.length; i < j; i++) { 
       var tableCell = tableRow.cells[i]; 
       // removes any line feeds or tabs 
       jsonRow.push(tableCell.innerHTML.replace(/\t|\n/g, "")); 
      } 
      jsonTable.push(jsonRow) 
     } 
    } 
    return JSON.stringify(jsonTable); 
} 

Il utilise la routine du domaine public JSON.stringify(), directement here.

Vous pouvez maintenant prendre cette chaîne, la transmettre à un serveur et réhydrater l'objet en Java-land. Vous obtiendrez un tableau de valeurs multidimensionnel correspondant directement au contenu de la table.

REMARQUE: Ceci récupère le tableau entier. Si vous voulez juste obtenir le corps de la table, vous devrez modifier le code ci-dessus pour parcourir les tBodies, comme ceci:

function processTable(tableId) { 
    var jsonTable = []; 
    var tableObj = document.getElementById(tableId); 
    if (tableObj) { 
     for (var a=0, b=tableObj.tBodies.length; a < b; a++) { 
      var tBody = tableObj.tBodies[a]; 
      for (var x=0, y=tBody.rows.length; x < y; x++) { 
       var tableRow = tableObj.rows[x]; 
       var jsonRow = []; 
       for (var i=0, j=tableRow.cells.length; i < j; i++) { 
        var tableCell = tableRow.cells[i]; 
        // removes any line feeds or tabs 
        jsonRow.push(tableCell.innerHTML.replace(/\t|\n/g, "")); 
       } 
       jsonTable.push(jsonRow) 
      } 
     } 
    } 
    return JSON.stringify(jsonTable); 
} 
0

POSTEZ la table sur le serveur. Si vous voulez accéder au DOM comme vous le feriez en JavaScript, vous aurez besoin de Rhino. Mais je recommande simplement de coller avec quelque chose de plus facile à déposer comme JDOM. Ensuite, renvoyez la table avec le type de contenu modifié dans l'en-tête "application/ms-excel".

Questions connexes