从Java管理动态JavaScript的最佳实践是什么?

时间:2013-09-25 12:01:23

标签: java javascript jsp markerclusterer

我正在JSP中开发一个网页,它使用来自Java后端类的大量动态生成的JavaScript代码。它是关于Google Maps和一个名为MarkerClusterer的JS库。

目前,这个类通过处理Java中的字符串并将其直接打印到JSP页面来生成JavaScript代码,但是在Java String中编写JS并保持这一点会变得有点复杂。

JavaScript需要一直进行大量修改,因为此类正在不同的项目中使用。理想情况下,我想以一种可以用作库的方式打包它,不需要进一步修改,这就是问题,最好的方法是什么?

以下是代码的一部分:

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() {"
...

3 个答案:

答案 0 :(得分:2)

我会说:不要。

不要动态生成javascript。维持这将是一场噩梦。将js保存在静态文件中,并使用ajax获取数据。您的数据可以采用JSON格式。可以使用您可以下载的许多JSON库之一从对象层次结构自动生成JSON。

答案 1 :(得分:1)

您可以做的一件事是,使用字符串缓冲区并将所有java脚本内容添加到其中。 然后用.js作为扩展名写一个文件。所以,这使你的脚本可维护

答案 2 :(得分:1)

您可以编写一个单独的JSP文件来创建javascript。那么Javascript的所有静态部分都会像往常一样:

var map;

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

var selecionado;
...

然后,可以通过其他JSP创建的HTML页面加载此JSP:

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

如果您的脚本需要访问数据,您可以通过URL传递参数:

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

然后,在脚本中,在过滤器或类似的东西中,您可以直接使用这些参数或使用它们从数据库中加载数据等。