我有一个带有GoogleMaps的Struts2网站。我想加载保存在SQL DDBB中的标记列表。为此,我尝试使用jQuery和Ajax。你在这里是代码:
loadMarkers.java
public class loadMarkers extends ActionSupport implements ServletRequestAware,ServletResponseAware{
//Variables de sesion/cookie
FunctionClass ses;
protected HttpServletResponse servletResponse;
protected HttpServletRequest servletRequest;
private String userID="";
//Variables del marker
private List<marker> markersList = new ArrayList<marker>();
public String execute() throws Exception{
FunctionClass friends = new FunctionClass();
//Leemos de la cookie
for(Cookie c : servletRequest.getCookies()) {
if (c.getName().equals("userID"))
userID = (c.getValue());
}
System.out.println("en el loadMarkers");
connectionBBDD con = new connectionBBDD();
markersList = con.loadMarkers(userID);
return SUCCESS;
}
我想在Javascript中使用markerList数组来创建标记。
这是struts.xml文件:
<package name="jsonActions" namespace="/test" extends="json-default">
<action name="LoadMarkers" class="web.localizadroid.maps.loadMarkers">
<interceptor-ref name="basicStack"/>
<result type="json">
<param name="root">markersList</param>
</result>
</action>
</package>
这里你是Javascript(jQuery)代码:
function loadMarkersJ(){
alert("dentro");
$.ajax({
type : "post",
url : "LoadMarkers",
dataType: "json",
success : function(data) {
alert(data);
var image = new google.maps.MarkerImage ('http://i53.tinypic.com/ettquh.png');
var jSon_Object = eval("(" + data + ")");
//For para analizar los datos (Json) obtenidos de la BBDD
for (x = 0; x < jSon_Object.length; x++) {
var markersArray = [];
var myLatlng = new google.maps.LatLng(jSon_Object[x].lat, jSon_Object[x].lon);
markerLoaded = new google.maps.Marker( {
position : myLatlng,
map : map,
icon: image,
title: "NOMBRE: " + jSon_Object[x].tarjetName + "\n" + "ANOTACIONES: " + jSon_Object[x].anotaciones + "\n" + "TIME: " + jSon_Object[x].time
});
markersArray.push(markerLoaded);
if (markersArray) {
for (i in markersArray) {
alert("entro en forColocaMarkers");
if (markersArray[i].getAnimation() != null) {
markersArray[i].setAnimation(null);
} else {
markersArray[i].setAnimation(google.maps.Animation.BOUNCE);
}
markersArray[i].setMap(map);
}
}
}
}
});
}
从success : function(data) {
到最后,是创建de标记的JavaScript代码,这没关系。问题是ajax,因为我没有通过jSon数据返回获取markerList数组...我认为问题出在$ .ajax的url属性中......我尝试了loadMarkers.action和loadMarkers,但没有发生。当我执行网络时,只打印提醒alert("dentro")
,从未打印过警告alert(data)
。
我忘了在我调用Javascript函数(loadMarkersJ)的地方添加代码。你在这里:
<p><s:a action="LoadMarkers.action" namespace="/test" onclick="loadMarkersJ(this)">Cargar Marcadores S</s:a></p>
有人可以帮我吗?
答案 0 :(得分:2)
您是否考虑过使用Struts2-jQuery plugin它真的简化了Struts2的ajax开发,我自己使用它
答案 1 :(得分:0)
为什么我们不能在JSP中提供内容类型信息。它对我有用。
我们不需要下载任何插件来实现对struts操作的JSON支持。
我们可以下载GSON.之类的任何json转换器 使用以下命令将对象转换为json格式。
Gson gson = new Gson();
json = gson.toJson(events);
return SUCCESS;
成功的JSP
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@page contentType="application/json" %>
<s:property value="json" escape="false"/>
答案 2 :(得分:0)
在javascript函数调用后添加return false
。
<p><s:a action="LoadMarkers.action" namespace="/test" onclick="loadMarkersJ(this); return false;">Cargar Marcadores S</s:a></p>
检查出来: