繁体   English   中英

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

[英]What is the best practice to manage dynamic JavaScript from Java?

我正在用JSP开发一个网页,该网页使用了大量来自Java后端类的动态生成的JavaScript代码。 它涉及Google Maps和一个称为MarkerClusterer的JS库。

当前,此类通过在Java中处理String并将其直接打印到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() {"
...

我会说:不。

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

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

您可以编写一个单独的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>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM