2

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

目前这个类是通过在Java中处理字符串并将其直接打印到JSP页面来生成JavaScript代码,但是在Java字符串中编写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() {"
...
4

3 回答 3

2

我会说:不要。

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

于 2013-09-25T12:17:24.247 回答
1

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

于 2013-09-25T12:09:32.730 回答
1

您可以编写一个单独的 JSP 文件来创建 javascript。然后 Javascript 的所有静态部分将照常进行:

var map;

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

var selecionado;
...

这个 JSP 然后可以由您的其他 JSP 创建的 HTML 页面加载:

<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>

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

于 2013-09-25T12:11:34.413 回答