Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java管理动态JavaScript的最佳实践是什么?_Java_Javascript_Jsp_Markerclusterer - Fatal编程技术网

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

从Java管理动态JavaScript的最佳实践是什么?,java,javascript,jsp,markerclusterer,Java,Javascript,Jsp,Markerclusterer,我正在用JSP开发一个网页,它使用大量来自Java后端类的动态生成的JavaScript代码。它是关于谷歌地图和一个叫做MarkerClusterer的JS库的 目前,这个类通过在Java中处理字符串并将其直接打印到JSP页面来生成JavaScript代码,但是在Java字符串中编写JS并维护它变得有点复杂 JavaScript始终需要大量修改,因为这个类正在不同的项目中使用。理想情况下,我希望以一种可以用作库的方式对其进行打包,而不需要进一步修改,所以这就是问题所在,什么是实现这一点的最佳方式

我正在用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() {"
...
公共类JavascriptGenerator{
公共字符串gerarPorRegiao(字符串上下文路径、列表列表A、布尔信息窗口已启用){
字符串saida=“”;
赛达+=“”
+ ""
+ ""
+“var映射;”;
for(Estado e:Estado.values()){
saida+=“var mc”+e.toString()+“;”;
}
saida+=“变量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();”
+“函数geocoderInit(){”
...

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

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

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

var map;

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

var selecionado;
...
var映射;
var-mc;
选择变种;
...
然后,此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>


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

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

var map;

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

var selecionado;
...
var映射;
var-mc;
选择变种;
...
然后,此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>

然后,在脚本、过滤器或任何类似的地方,您可以直接使用这些参数,或者使用它们从数据库加载数据。

我会说:不要

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

我想说:不要


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

做某事从来没有最好的方法。只有有效的方法最适合你。做某事从来没有最好的方法。只有最适合你的方法。我也在考虑类似的事情,但是如何将方法需要的变量传递到页面?也许我可以使用
SESSION
POST
来代替?不知道你所说的SESSION和POST是什么意思。我认为这不起作用。你可以传递URL pJSP的参数:path/to/JSP/file.JSP?id=17我按照你说的方式做了,只是我使用了
SESSION
,因为它支持传递对象。你提到的URL参数称为
GET
,与
SESSION
POST
,它是web程序中从一个页面传递数据到另一个页面的三种方式之一mming。如果您想了解更多信息,请阅读此处,这是一篇PHP文章,但每种web语言都有这样一条:将数据放入会话意味着将其保存在服务器端。这意味着如果用户打开多个浏览器选项卡,而所有选项卡共享一个会话,则可能会出现问题。POST超出范围,因为-tag始终通过HTTP GET。我也在考虑类似的事情,但是如何将方法需要的变量传递到页面?也许我可以使用
SESSION
POST
来代替?我不知道SESSION和POST是什么意思。我想不会起作用。你可以将URL参数传递到JSP:path/to/JSP/file.JSP?id=17我按照你说的方式做了,除了使用
SESSION
,因为它支持传递对象。您提到的URL参数称为
GET
,与
SESSION
POST
一起,它是web编程中从一个页面传递数据到另一个页面的三种方式之一。如果您想了解更多信息,请阅读这里,这是一篇PHP文章,但每个web站点都有语言有这样的功能:将数据放入会话意味着将其保存在服务器端。这意味着如果用户打开多个浏览器选项卡,因为所有选项卡共享一个会话,则可能会出现问题。POST超出范围,因为-tag总是通过HTTP get加载javascript文件。从理论上讲,这似乎是一个不错的选择——除非您尝试这样做在实践中实现这一点:)如果页面上有几个复杂度适中的jQuery UI元素(几个jQuery datatables,和Select2,和..),并且它们都开始使用AJAX下载数据,结果是您看到一个“逐渐”出现的页面—首先是这个datatable,然后是,