2013-06-12 71 views
1

我正在使用JSP開發一個存儲包含bean的會話Arraylist的簡短項目,在另一個JSP頁面中我從按鈕onClick =「Delete中調用delete()函數()「,也放在</body>的末尾。在按鈕事件調用之前調用Javascript函數

<script> 
function Delete(){ 
    var e = document.getElementById("DPwatches"); 
      var strUser = e.options[e.selectedIndex].text; 

      var size=${fn:length(list)}; 
      if(size>0){ 
       <% 
       ArrayList<Resource.Watch> list = (ArrayList<Resource.Watch>) request.getSession() 
      .getAttribute("list"); 
       list.clear(); 
       %> 
      } 
      else{ 
       alert("No elements"); 
      }      
} 

的問題是,當頁面加載我的函數被調用,它從沒有按鈕事件ArrayList中刪除我的對象。這有點令人沮喪,因爲我的Arraylist在我擁有的其他JSP頁面中工作正常。 PD:我也執行了<body onLoad="Delete()">沒有結果。

回答

1

您的問題是服務器端腳本與客戶端JavaScript混淆。

下面的代碼將執行每次頁面加載時間:

<% 
    ArrayList<Resource.Watch> list = (ArrayList<Resource.Watch>) request.getSession() 
     .getAttribute("list"); 
    list.clear(); 
%> 

你的假設是,它一定會執行的JavaScript函數,這是不正確的部分。您可以通過查看您呈現的HTML來驗證此情況,您將在其中看到一個空的if塊。

更好的方法是執行一些操作,例如對執行相同操作的servlet方法執行Ajax調用,而不是將此代碼直接放入JSP中。

+0

你能告訴我一個從腳本訪問servlet函數的簡單例子嗎? –

+0

@VictorPinto [jQuery.ajax()](http://api.jquery.com/jQuery.ajax/)可以完成這項工作。 –

相關問題