2013-09-25 2 views
2

Je développe une page Web dans JSP qui utilise une grande quantité de code JavaScript généré dynamiquement à partir d'une classe backend Java. Il s'agit de Google Maps et d'une bibliothèque JS appelée MarkerClusterer.Quelle est la meilleure pratique pour gérer le JavaScript dynamique à partir de Java?

Actuellement, cette classe génère le code JavaScript en manipulant Strings en Java et en l'imprimant directement dans la page JSP, mais cela devient un peu compliqué d'écrire JS dans Java String et de le maintenir.

Le JavaScript nécessite de nombreuses modifications, car cette classe est utilisée dans différents projets. Idéalement, je voudrais emballer cela de manière à ce qu'il puisse être utilisé comme une bibliothèque, sans nécessiter de modifications supplémentaires, alors c'est la question, quelle est la meilleure façon de le faire?

est ici une partie du code:

public class JavascriptGenerator { 

    public String gerarPorRegiao(String contextPath, List<Endereco> lista, boolean infoWindowEnabled) { 
     String saida = ""; 

     saida += "<script type=\"text/javascript\" src=\"http://maps.google.com/maps/api/js?sensor=false\"></script>" 
       + "<script type=\"text/javascript\" src=\"" 
       + contextPath 
       + "/js/markerclusterer.js\"></script>" 
       + "<script type=\"text/javascript\">" 
       + "var map;"; 
     for(Estado e: Estado.values()) { 
      saida += "var mc" + e.toString() + ";"; 
     } 
       saida += "var selecionado;" 
       + "var center = new google.maps.LatLng(-11.0, -51.9);" 
       + "var geocoder = new google.maps.Geocoder();" 
       + "var infowindow = new google.maps.InfoWindow();" 
       + "var markerContent = new Array();" 
       + "function geocoderInit() {" 
... 
+0

Il n'y a jamais de meilleure façon de faire quelque chose. Seul le chemin qui fonctionne le mieux pour * vous *. – Philipp

Répondre

2

Je dirais: ne le faites pas.

Ne générez pas de javascript de façon dynamique. Je serai un cauchemar à entretenir. Conservez votre js dans un fichier statique et utilisez ajax pour récupérer vos données. Vos données peuvent être sous la forme de JSON. JSON peut être généré automatiquement à partir d'une hiérarchie d'objets en utilisant l'une des nombreuses librairies json que vous pouvez télécharger.

+0

Cela semble être un choix bon et élégant en théorie - sauf si vous essayez de l'implémenter dans la pratique :) Si vous avez plusieurs éléments d'interface utilisateur jQuery sur la page de complexité modérée (plusieurs datastables jQuery, et Select2, et ..), et ils commencent tous à télécharger les données en utilisant AJAX, le résultat est que vous voyez une page qui "prend vie" - premièrement cette date, ensuite, le select "trouve" ses options, puis .. "User l'expérience "souffre et la page complète semble se charger lentement .. –

+0

Je ne suis pas d'accord et il est bien connu qu'une page apparaîtra plus vite aux humains si quelque chose se passe sur la page. Mais le cœur de ma réponse est d'utiliser un json lib pour rendre les données. Si vous souhaitez, vous pouvez simplement mettre un blob json dans une balise de script. Ce ne sera pas plus difficile à maintenir. –

+0

"Si vous souhaitez mettre un blob json dans une balise de script" - vous pouvez créer un tag personnalisé (jsp) qui affiche votre json dans des endroits appropriés dans la section dans un format javascript. Est-ce ce que vous suggérez, ou vous pensiez à quelque chose de plus simple? –

1

une chose que vous pouvez faire est, utiliser un tampon de chaîne et ajouter tout ce que vous des trucs de script java en elle. Ensuite, écrivez-lui un fichier avec .js comme extension. Donc, cela rend votre script maintenable

1

Vous pouvez écrire un fichier JSP distinct qui crée le javascript. Ensuite, toutes les parties statiques du Javascript seraient comme d'habitude:

var map; 

<% for(Estado e: Eastado.values()) { %> 
var mc<%=e.toString()%>; 
<% } %> 

var selecionado; 
... 

Cette JSP peut alors être chargé par la page HTML de votre autre JSP crée:

<script type="text/JavaScript" src="path/to/jsp/file.jsp"></script> 

Si votre script a besoin d'accéder aux données, vous pourrait passer des paramètres via l'URL:

<script type="text/JavaScript" src="path/to/jsp/file.jsp?id=15"></script> 

Ensuite, dans le script, dans un filtre ou quelque chose de similaire, vous pouvez utiliser directement ces paramètres ou les utiliser pour charger des données à partir d'une base de données ou ainsi.

+0

Je pensais à quelque chose comme ça aussi, mais comment passer les variables dont la méthode a besoin à une page? Peut-être que je peux utiliser 'SESSION' ou' POST' à la place? –

+0

Ne sais pas ce que vous entendez par SESSION et POST. Je ne vais pas travailler je pense. Vous pouvez passer des paramètres d'URL à la JSP: chemin/vers/jsp/fichier.jsp? Id = 17 – isnot2bad

+0

J'ai fait comme vous l'avez dit, sauf que j'ai utilisé 'SESSION', car il supporte le passage d'objets. Les paramètres d'URL que vous avez référencés s'appellent 'GET', et avec' SESSION' et 'POST', c'est l'une des trois façons de transmettre des données d'une page à une autre dans la programmation web. Si vous voulez en savoir plus, lisez ici, c'est un article PHP, mais chaque langue a ceci: [link] (http://www.royhochstenbach.com/php-passing-information-http-post-vs- http-get-vs-sessions-vs-cookies /) –

Questions connexes