2013-08-30 37 views
2

我是新手,我的意思是使用JSP,servlet和JavaScript/jQuery/AJAX。我想讓下拉菜單來自新的響應取決於請求。但是,似乎我找不到讓servlet發送不同響應的方法。
我想使用AJAX爲了避免頁面重新加載,所以特定的下拉元素將被重新加載。
我做了服務器端的服務。我放在這裏的代碼是客戶端的代碼。在客戶端,我們使用JSP,Servlet和JavaScript/jQuery。請求servlet的不同響應並使用AJAX和JSP

這裏是我的JSP:

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML> 

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>Coba aja</title> 
     <script src="../js/jquery.min.js"></script> 
     <script src="../js/basic.js"></script> 
    </head> 
    <body> 

     <select name="idprovinsi" id="idprovinsi"> 
      <option value="" >--Pilih Provinsi--</option> 
     </select> 

     <select name="idkota" id="idkota"> 
      <option value="" >--Pilih Kota/Kabupaten--</option> 
     </select> 

     <select name="idkecamatan" id="idkecamatan"> 
      <option value="" >--Pilih Kecamatan--</option> 
     </select> 

     <select name="iddesa" id="iddesa"> 
      <option value="" >--Pilih Desa--</option> 
     </select> 

     <input type="hidden" id="dropdown" value=""> 
    </body> 
</html> 


這裏是我的JavaScript:

var arrayProvinsi = new Array(); 
var arrayKota = new Array(); 
var arrayKecamatan = new Array(); 
var arrayDesa = new Array(); 

$(document).ready(function() { 
$('#idkota').hide(); 
$('#idkecamatan').hide(); 
$('#iddesa').hide(); 
//alert("load pertama kali!"); 


    $('#idprovinsi').ready(function(){ 
     //alert("masuk ready!"); 
     $.ajax({ 
      url:"../update", 
      type:"POST", 
      dataType:"json", 
      success: function(msg){ 
       //alert(msg); 
       //alert(msg.length); 

       var temp = new Array(); 
       temp = msg.arrayProvinsi; 

       //alert(temp); 
       //alert(temp.length); 

       var selObj = document.getElementById("idprovinsi"); 

       for (var i=0; i < temp.length;++i) 
       { 
        //alert("nama:"+msg[i].provinsiname); 
        addOptionProvinsi(selObj, temp[i].provinsiname, temp[i].idprovinsi); 
       } 
      } 
     }); 
    }); 

    $('#idprovinsi').change(function(){ 
     //alert($('#idprovinsi').val());   
     $('#idkota').show(); 
     $('#dropdown').val("kota"); 
     alert("dropdown provinsi change alert! nilai id provinsi: "+$('#idprovinsi').val()+" nilai dropdown:"+$('#dropdown').val()); 

     $.ajax({ 
      url:"../update", 
      type:"POST", 
      dataType:"json", 
      success: function(msg){ 
       alert(msg.length); 
       var temp = new Array(); 
       temp = msg.arrayKota; 
       alert(temp.length); 
       var selObj = document.getElementById("idkota"); 
       for (var i=0; i < msg.length;++i) 
       { 
        alert("nama:"+temp[i].kotaname); 
        addOptionKota(selObj, msg[i].kotaname, msg[i].idkota); 
       } 
      } 
     }); 
    }); 

}); 

function addOptionProvinsi(selectbox,text,value) 
{ 
    if(isInArray(text, arrayProvinsi)){ 

    }else{ 
     arrayProvinsi.push(text); 
     var optn = document.createElement("OPTION"); 
     optn.text = text; 
     optn.value = value; 
     selectbox.options.add(optn); 
    } 

} 

function addOptionKota(selectbox,text,value) 
{ 
    if(isInArray(text, arrayKota)){ 

    }else{ 
     arrayKota.push(text); 
     var optn = document.createElement("OPTION"); 
     optn.text = text; 
     optn.value = value; 
     selectbox.options.add(optn); 
    } 

} 

function isInArray(value, array) { 
    return array.indexOf(value) > -1 ? true : false; 
} 


這裏是我的servlet:

@WebServlet("/update") 
public class CobaServlet extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 

    } 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     Map <String,Object> map= new HashMap<String, Object>(); 
     //get data All Provinsi 
     String url=""; 
    CallService cs= new CallService(); 
    String feedback =""; 
     MultivaluedMapImpl params = new MultivaluedMapImpl(); 

     String dropdown  = request.getParameter("dropdown"); 

     String idprovinsi = request.getParameter("idprovinsi"); 
     String idkota  = request.getParameter("idkota"); 
     String idkecamatan = request.getParameter("idkecamatan"); 
     String iddesa  = request.getParameter("iddesa"); 


     if(idprovinsi != null && !idprovinsi.equals("")){ 
      //get data All Kota 
      url = "http://localhost:8080/sPuskesmas/rest/kotaservice/getKotaByIdprovinsi"; 
      params.add("idprovinsi", idprovinsi); 
      feedback = cs.callGetService(url,params); 
      JSONArray arrayKota= JsonToArray.toArray(feedback); 

      //write(response, arrayKota); 
      //request.setAttribute("arrayKota", arrayKota); 
      map.put("arrayKota", arrayKota); 
      write(response,map); 
     } 
     else if(idprovinsi==null || idprovinsi.equals("")){ 
      url = "http://localhost:8080/sPuskesmas/rest/provinsiservice/getAllProvinsi"; 
      feedback = cs.callGetService(url); 
      JSONArray arrayProvinsi= JsonToArray.toArray(feedback); 

      //write(response, arrayProvinsi); 
      //request.setAttribute("arrayProvinsi", arrayProvinsi); 
      map.put("arrayProvinsi", arrayProvinsi); 
      write(response,map); 

     } 
    } 

    private void write(HttpServletResponse response, Map<String, Object> map) throws IOException { 
     response.setContentType("application/json"); 
     response.setCharacterEncoding("UTF-8"); 
     response.getWriter().write(new Gson().toJson(map)); 
    } 

    private void write(HttpServletResponse response, JSONArray arrayNya) throws IOException { 
     response.setContentType("application/json"); 
     response.setCharacterEncoding("UTF-8"); 
     response.getWriter().write(new Gson().toJson(arrayNya)); 
    } 

} 


我不知道如何得到不同的迴應,因爲我總是得到相同的第一個迴應。 我只是想訪問servlet的不同部分,所以我可以得到我想要的響應。你能幫我解決嗎?

非常感謝。

回答

0

你可以做的是傳遞一個參數的servlet像

$.ajax({ 
      type: 'POST', 
      url: 'servletname?&selecttype=idprovinsi', //change this for each combo 
      success:function(data){ 

      } 
     }); 

在servlet的

String type= req.getParameter("selecttype"); 

    if(type.equals("idprovinsi")){ 
    --dosomething 
    } 

處理的servlet,它的參數,並在你的反應差異。

滿足這一點,成功填補組合。

+0

我按照你的建議做了,但結果是錯誤 - >加載資源失敗:服務器響應狀態爲500(內部服務器錯誤)。那麼,javascript中的「selecttype」可以像這樣從servlet訪問嗎?或者我應該在jsp中使用隱藏的輸入類型來做些什麼? – me123chan

+0

你在servlet調試中看到的是那個param值到那裏? –

+0

順便說一句,當我改變「如果條件」的順序,錯誤消失。但是,我仍然只能得到「arrayProvinsi」結果。我需要「arrayKota」。儘管url已經改變爲url:「../ update?&selecttype = idprovinsi」,但在Chrome控制檯中,它的顯示效果如下。但是,如果在servlet中的條件似乎不起作用。 – me123chan