我正在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() {"
...
答案 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>
然后,在脚本中,在过滤器或类似的东西中,您可以直接使用这些参数或使用它们从数据库中加载数据等。