2010-02-18 55 views
3

我需要在加載JSP時調用一個動作。跟蹤訪問該頁面的用戶數量。如何從Ajax或JavaScript調用Struts1操作?

我有一個行動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

請幫助我。或者任何其他方式來調用該行動。 我無法重新加載頁面,因爲它會再次調用onload函數。

感謝, 了Dj

+0

爲什麼「p_p_state」的值是「pop_up」? – Shashi 2010-03-03 07:57:13

+0

你是否已經通過你的動作類代碼進行了調試?你在哪裏得到空錯誤?我正在使用Struts 1.3進行一些AJAX調用,並且我沒有在我的操作類中做任何特殊的事情,所以我猜你的問題可能與你發送的參數有關。 – bittersweetryan 2011-09-06 01:22:49

回答

0

您需要調用的動作時,指定正確的URL。在您的struts.xml文件中,您將創建一個名稱爲action的條目。我們說這個名字是VisitorCounterAction。請注意,這不是Action類的名稱,而是您在struts.xml中使用的名稱。

此外,您還可以配置struts來識別特定的擴展名。默認情況下它是.do。

要請求操作,您將使用:VisitorCounterAction.do。

所以嘗試:

xmlhttp.open("GET","VisitorCounterAction.do",false); 

還要注意雙引號的URL,因爲這是在XMLHTTP對象的open()方法的字符串。

+0

嗨, 現在這個例外是這個(記錄器信息在控制檯中): 20:44:32,153信息[標準輸出] 2010-02-18 20:44:32,153 [http-localhost%2F127.0.0.1-8080-2] WARN com.liferay.portal.util .PortalImpl - 當前URL /web/guest/VisitorCounterAction.do生成異常:null – 2010-02-18 15:17:23

0

XMLHttpRequest對象的open方法的第二個參數應該是一個字符串,它是請求的URL。在你的情況下,它應該是映射到你的VisitorCounterAction的Struts的動作映射。喜歡的東西:

xmlhttp.open("GET", "/viewCounterAction.do", false); 
+0

嗨,約翰, 我的問題將與我的門戶。我正在使用Liferay門戶。它仍然給出相同的例外。但我終於可以看到警報信息了。 在控制檯中看到異常。我dono笏做,它不會去行動。 – 2010-02-18 15:34:57

+0

您能否告訴我應該包含哪些Jar以使我的應用程序具有AJAX,我正在使用Struts 1.3版本。 我有struts2-dojo-plugin.jar,這是否適用於Struts 1.3版本? – gmhk 2010-02-26 16:22:43