2016-05-06 30 views
0

我有一個動態的web應用程序。我的程序是,用戶輸入一個搜索詞,作爲迴應,將獲得每個詞的複選框,以便用戶檢查該文檔是否相關。jsp在響應不起作用後調用servlet

我的問題是如何將清單值發送到我的servlet,我的servlet將在第一個響應之後被調用。我雖然創建了另一個將獲取清單值的servlet,但我不知道 我怎麼稱呼它。

這是我的servlet代碼位

String query= req.getParameter("query") ; 

      PrintWriter out = resp.getWriter(); 

      if(result.isEmpty()) 
      {out.println("<p> No search result found</p>"); } 
      else 
      { 
      out.println("<table style="+"width:100%"+">"); 
      out.println("<tr> <td> <p> "+result.size() +" documents found </p></td>"); 
      out.println("<td> Relevant </td></tr>"); 
     for(String word : result.keySet()) 
       {String regex = "\\b.html\\b"; 
       String content = word.replaceAll(regex, ""); 
       out.println("<tr> <td>"); 
       out.println("<p>"); 
       out.println(" <a href="+target_dir+"/"+word+">"+content+"</a>"); 
       out.println("</p>"); 
       out.println("</td> <td>"); 
      out.println(" <input type="+"checkbox name="+word+">"); 
       out.println("</td></tr>"); 
       } 

     out.println("</table>");} 
     // out.println(query); 
     out.close(); 

這一點我的html代碼:

<html> 
<head> 
<script> 
     function sendValues(param){ 
      xmlHttp = new XMLHttpRequest(); 
      xmlHttp.onreadystatechange=callback; 
      var url="servlet"+"?query="+ 
       document.getElementById("search").value ; 
      xmlHttp.open("GET",url,true); 
      xmlHttp.send(); 
     } 
     function callback() { 
      if(xmlHttp.readyState==4 && xmlHttp.status==200) { 
       var value = xmlHttp.responseText; 
       document.getElementById("searchresult").innerHTML = value; 
       } 
       } 
    </script> 


</head> 
<div id="resultArea"></div> 

<body> 

<div class="form-wrapper"> 
    <input type="text" id="search" name="query" placeholder="Search for..." required> 
    <input type="button" value="search" id="submit" onclick="sendValues()"/>&nbsp; 
</div> 
<div class="panel" id="searchresult"> </div>  
</body> 
</html> 

sample of my output :

回答

0

你可以有下一個調用的結果的按鈕功能,提交數據的複選框

var value = xmlHttp.responseText; 
value += '<button type="button" class="relevence">Set Relevant</button>'; 
document.getElementById("searchresult").innerHTML = value; 

附加一個事件偵聽器點擊

document.querySelector('#searchresult').addEventListener('click', function(e){ 
    if (e.target.className == 'relevence'){ 
     var arguments = ''; 
     var checked = document.querySelectorAll('#searchresult :checked'); 
     var len = checked.length 
     if (len == 0) return; 
     for (var i = 0; i < len; i++){ 
      arguments += checked.getAttribute('name') + '=on&' 
     } 
     xmlHttp = new XMLHttpRequest(); 
     xmlHttp.onreadystatechange=callback; 
     var url="otherservlet?"+arguments; 
     xmlHttp.open("GET",url,true); 
     xmlHttp.send(); 
     function callback() { 
      if(xmlHttp.readyState==4 && xmlHttp.status==200) { 
       console.log(xmlHttp.responseText); 
      } 
     } 
    } 
}); 

只是循環通過get參數,以獲得這是檢查的話。

============================================== =

你忘了?開始查詢字符串

var url="servlet"+"?query="+ 
    encodeURIComponent(document.getElementById("search").value) ; 
+0

這是在我的代碼,我想我忘了補充它,我的問題提交後我怎麼能再次調用servlet來發送清單值? – Sabd

+0

它仍然是,當我按下按鈕設置相關沒有發生 – Sabd