我需要在加载JSP时调用一个动作。跟踪访问该页面的用户数量。
我有一个动作VisitorCounterAction
,它会更新数据库。
在加载JSP时,我正在调用ajax函数callCounter()
;
{
alert("callCounter");
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
// i need some correction here
xmlhttp.open("GET",VisitorCounterAction,false);
xmlhttp.send(null);
alert("callCounter returned from Action");
}
我得到一个例外:
/web/guest/content?p_p_id=31&p_p_lifecycle=0&p_p_state=pop_up&p_p_mode=view&_31_struts_action=%2Fimage_gallery%2Fview_slide_show&_31_folderId=10605 generates exception: null
请帮我解决这个问题。或者任何其他方式来调用Action。 我无法重新加载页面,因为它将再次调用onload函数。
谢谢, DJ
答案 0 :(得分:0)
调用操作时需要指定正确的url。在struts.xml文件中,您将创建一个带有名称的操作条目。假设名字是VisitorCounterAction。请注意,这不是Action类的名称,而是您在struts.xml中使用的名称。
此外,您还可以配置struts来识别特定的扩展名。默认情况下是.do。
要请求操作,您将使用:VisitorCounterAction.do。
所以试试:
xmlhttp.open("GET","VisitorCounterAction.do",false);
还要注意URL周围的双引号,因为这是xmlHttp对象的open()方法中的String。
答案 1 :(得分:0)
XMLHttpRequest对象的open
方法的第二个参数应该是一个字符串,它是请求的URL。在您的情况下,应该是Struts的Action Mapping映射到您的VisitorCounterAction
。类似的东西:
xmlhttp.open("GET", "/viewCounterAction.do", false);
答案 2 :(得分:0)
如果您使用的是Liferay 4.2,则此链接可能会对您有所帮助(http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Ajax+Toolkit)。 Liferay 4.2拥有自己的一套用于执行AJAX功能的JavaScript API(在jquery中实现)。