2013-12-23 82 views
2

我想將一個javascript變量傳遞給我的servlet,我需要使用它。在jsp中訪問javascript變量值

在JavaScript中,變量計數返回我的表格的行和我可以告訴計數在JSP中,使用$('#counter').html(count);,但我不能計數的值傳遞給我的servlet。我試過document.getElementById("hiddenField").value=count;但它不起作用。

的Javascript

<script> 
    var count = 3; 
    $(function() { 
     $('#counter').html(count); 
     $('#addButton').bind('click', function() { 
      count = document.getElementById("dataTable").getElementsByTagName("tr").length; 
      $('#counter').html(count); 
     }); 
     $('#deleteButton').bind('click', function() { 
      count = document.getElementById("dataTable").getElementsByTagName("tr").length; 
      $('#counter').html(count); 
     }); 
    }); 
    document.getElementById("hiddenField").value=count; // ??? 
</script> 

JSP

Count: <span id="counter"></span> <%-- it works --%> 

<form method="post" action="newteamsubmit"> 
... 
<input type="hidden" id="hiddenField" name ="countRows" /> 
<input type="submit" name ="button1" value=" Submit " /> 
<input type="submit" name = "button1" value=" Cancel " /> 
</form> 

的Servlet

String cr = request.getParameter("countRows"); //I' ve tried also to convert it 
// to int, but that's not my problem, since I cannot pass the value as a start 

我花了很多時間,嘗試網絡瞭解我如何在jsp中訪問javascript變量,但我還沒有找到任何解決方案。 在此先感謝。

+0

您需要使用JSON – Lucas

+0

你是如何提交表單? – AbhinavRanjan

回答

0

每次單擊添加按鈕或刪除按鈕時都會計算出count。但是,當頁面被加載(並且其值被硬編碼爲3)時,您只設置一次隱藏字段值。

您必須設置它,因爲你正在做的#counter元素,在點擊處理程序:

$('#addButton').bind('click', function() { 
    count = document.getElementById("dataTable").getElementsByTagName("tr").length; 
    $('#counter').html(count); 
    $('#hiddenField').val(count); 
}); 
$('#deleteButton').bind('click', function() { 
    count = document.getElementById("dataTable").getElementsByTagName("tr").length; 
    $('#counter').html(count); 
    $('#hiddenField').val(count); 
}); 

另外請注意,您是在兩次單擊處理程序重複完全相同的代碼在這裏。你應該做的只有一次,這兩個按鈕:

$('#addButton, #deleteButton').bind('click', function() { 
    count = document.getElementById("dataTable").getElementsByTagName("tr").length; 
    $('#counter').html(count); 
    $('#hiddenField').val(count); 
}); 

甚至,因爲你使用jQuery:

$('#addButton, #deleteButton').bind('click', function() { 
    count = $("#dataTable tr").length; 
    $('#counter').html(count); 
    $('#hiddenField').val(count); 
}); 
0

document.getElementById('hiddenField')。value is not set,because it are outside your document.ready。把它放在你的點擊處理程序中。

0

做的兩件事情肯定 -

  1. 有您的網頁上只有一個ID爲「hiddenField」的元素。
  2. 確保下面的代碼

的document.getElementById( 「hiddenField」)值=計數。

在頁面中。

只要確保js在元素加載後設置了hiddenField。 3.使用Javascript控制檯檢查是否有任何JS錯誤。

休息,看起來不錯

0

這裏的主要問題是,你正試圖從服務器訪問,只存在於客戶端的變量。要訪問該變量,您必須使用AJAX將其從客戶端發送到服務器,以在後端觸發某種形式的API。 REST,SOAP或XML-RPC是用於這類事情的常用技術。服務器端代碼用於生成UI併爲其提供來自數據庫等的數據。通常UI僅生成一次,然後客戶端調用服務器以響應用戶操作請求更多數據,例如單擊按鈕。

想象一張充滿書籍信息的表格:標題,作者,發佈日期等。該表格可能會變得非常大,並且傳統上該表格將分成幾頁並可能是動態過濾器。爲了節省帶寬並通過不從頭開始加載整個頁面來增加用戶體驗,您可以使用AJAX向服務器索取相關數據。這樣可以爲用戶動態平滑地更新頁面。

對於您的情況,您可以使用此技術在用戶每次單擊按鈕時更新服務器。

但是,如果您真的只是想在用戶執行操作時更新表單中的隱藏字段,並且服務器不會執行任何操作,除非顯示它,否則您只能使用javascript。

還請記住請求變量包含您在提交表單時發佈到服務器的數據。在客戶端發佈它之後,servlet將獲取數據,這是JSP生成頁面之後的數據。代碼執行的順序是JSP - > Javascript - > Servlet。

希望這會有所幫助!

0

您可以用這種方式:

document.forms[0].countRows.value = counter 

希望這將幫助你