2010-05-24 4 views
5

Ich habe eine Liste des Typs A, in der jedes Element eine andere Liste des Typs B enthält. Ich möchte ein Formular erstellen, in dem ein Benutzer einen Wert aus der Dropdown-Liste mit Werten von A auswählt, ein weiteres Dropdown zum Auffüllen Werte, die auf der Liste des ausgewählten Elements von Typ B basieren. Ich bin neu bei jQuery, aber ich weiß, dass es bequem ist, dies mit jQuery anstelle von reinem jsp zu tun. Bitte geben Sie mir eine grobe Übersicht über die Schritte, die ich befolgen muss, um dies zu erreichen.Wie dynamische Dropdown-Listen mit jQuery und Jsp generieren?

Antwort

10

JSP ist nur eine Server-Side-View-Technologie. Es konkurriert nicht mit jQuery. Sie können JSP dafür perfekt weiterverwenden. Aber ich verstehe, dass Sie eine asynchrone Anfrage mit ajaxischen Techniken statt einer synchronen Anfrage auslösen wollen. Das ist auch in JSP kein Problem.

Zuerst müssen wir zwei Dropdown-Listen in JSP haben:

<select id="dropdown1"> 
    <c:forEach items="#{bean.items}" var="item"> 
     <option value="#{item.value}">#{item.label}</option> 
    </c:forEach> 
</select> 
<select id="dropdown2"> 
    <option>Please select dropdown1</option> 
</select> 

Dann benötigen wir einige jQuery zum change Ereignisse befestigen, so dass es den zweiten Drop-Down auf dem Wert des ersten Drop-Down-basierten füllt. Folgendes an die <script> in JSP oder ein externes Skript hinzufügen, die durch <script src> in JSP geladen wird:

$(document).ready(function() { 
    $('#dropdown1').change(function() { 
     var selectedValue = $(this).val(); 
     var servletUrl = 'dropdown2options?value=' + selectedValue; 

     $.getJSON(servletUrl, function(options) { 
      var dropdown2 = $('#dropdown2'); 
      $('>option', dropdown2).remove(); // Clean old options first. 
      if (options) { 
       $.each(opts, function(key, value) { 
        dropdown2.append($('<option/>').val(key).text(value)); 
       }); 
      } else { 
       dropdown2.append($('<option/>').text("Please select dropdown1")); 
      } 
     }); 
    }); 
}); 

Im Servlet hinter dem url-pattern von /dropdown2options Rückkehr nur die Karte von Optionen als JSON. Sie können dazu Gson verwenden.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String selectedValue = request.getParameter("value"); 
    Map<String, String> options = optionDAO.find(selectedValue); 
    String json = new Gson().toJson(options); 
    response.setContentType("application/json"); 
    response.setCharacterEncoding("UTF-8"); 
    response.getWriter().write(json); 
} 

Das ist im Grunde alles.

0

Ich beantwortete eine ähnliche Frage über chained selectors here ... Ich weiß nicht über Jsp, aber diese jQuery-Version sollte Ihnen eine Idee geben.