Rückkehr java.util.Liste aus einem Spring MVC controller via AJAX mit Jackson

Basierend auf meine Frage gepostet vor ein paar Tagen, ich erkannte, dass SimpleFormController ist ungeeignet für die Handhabung von Ajax-Anfragen. Deshalb bin ich die Migration meiner Anwendung hin zu kommentierten Controller.

Ich versuche, um wieder eine java.util.List aus der Oracle-Datenbank mithilfe von Spring MVC 3.0.2 mit Hibernate via Ajax mit Jackson 1.9.8 (download Seite), aber ich habe noch nicht gearbeitet, JSON, in jeder Technologie. Ich Las einige tutorials/Artikeln, aber ich konnte nicht die Idee, wie die Rückgabe solcher komplexen Datenstrukturen und analysieren diese mithilfe von JSON im Frühjahr. Ich versuche zu lernen JSON-Konzepte wie den ersten.

Was im Grunde versuche ich, ist, wenn ein Land ausgewählt ist, die aus einem Land wählen Sie das Feld, die Staaten entsprechend, das Land sollte aufgefüllt werden aus der Datenbank per Ajax. Ich habe keine genaue Vorstellung darüber, wie die Rückgabe eines java.util.List über eine Ajax-Antwort, wie Sie analysiert werden, und wieder verwenden es in Java-code. Ich bin nur bis zu dem folgenden Niveau.

JS-code.

function getStates(countryId)
{
    $.ajax({
        datatype:"json",
        type: "POST",
        url: "/wagafashion/ajax/TempAjax.htm",
        data: "countryId=" + countryId,

        success: function(response)
        {
            $('#msg').html(response);
            $('#stateList').val('');
        },
        error: function(e)
        {
            alert('Error: ' + e);
        }
    });
}

Die Methode in der Spring-controller-Klasse, die aufgerufen wird, wenn der Ajax-request wird auf der onchange Ereignis des Landes, select-box.

@RequestMapping(method=RequestMethod.POST, value="ajax/TempAjax")
public @ResponseBody List<StateTable> getStateList(@ModelAttribute("tempBean") TempBean tempBean, BindingResult error, Map model, HttpServletRequest request, HttpServletResponse response)
{
    Session session=NewHibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    List<StateTable>list=session.createQuery("from StateTable where country.countryId=:countryId order by stateId").setParameter("countryId", new BigDecimal(request.getParameter("countryId"))).list();

    session.flush();
    session.getTransaction().commit();
    return list;
}

Den Staat select-box, die ich brauche zu füllen mit der Liste der Staaten, zurück durch die Ajax-Antwort mit einem <c:forEach></c:forEach> loop EL.

<form:select path="cmbState" class="validate[required] text-input tooltip" title="Mandatory select field.">
    <form:option value="">Select</form:option>

    <c:forEach items="${stateList}" var="row">
        <c:choose>
            <c:when test="${row.stateId==param['stateId'] and deselectCombo!=1}">
                <form:option value="${row.stateId}" selected="selected">${row.stateName}</form:option>
            </c:when>
            <c:otherwise>
                <form:option value="${row.stateId}">${row.stateName}</form:option>
            </c:otherwise>
        </c:choose>
    </c:forEach>
</form:select>

<font style="color: red"><form:errors path="stateId"/></font><br/>

Könnte ich nur Ajax-request und-response erfolgreich. Nichts mehr ich könnte verstehen, von denen tutorials über das internet gefunden. Genauer gesagt, wie kann ich die Ajax-Antwort in der items Attribut des vorhergehenden <c:forEach><c:forEach> Schleife wie items="${stateList}"?

Könnten Sie mir einige Tipp/Idee, wie kann ich wieder eine Liste mit Daten und verwenden Sie es in der vorhergehenden Schleife zum füllen der Staat select-box? Könnten Sie bitte führe mich einige Schritte weiter von hier aus?

Ich verwende NetBeans 6.9.1 (nicht Eclipse). In einigen tutorials über Marvan Projekte in Eclipse, es wurde erwähnt, dass die pom.xml - Datei ist erforderlich, zu konfigurieren, zu zählen <dependencies></dependencies> (Jackson Abhängigkeit). Es gibt keine solche Sache wie pom.xml in mein Projekt in NetBeans. Ist es erforderlich, konfigurieren Sie irgendwo in irgendeiner xml-Datei in NetBeans wie die genannten hier?

  • Ich bin mir nicht sicher, ob ich die Frage verstehe. die <c:forEach> ist ein JSP-tag, und daher führt serverside. Wenn das gerenderte HTML wird der browser des Clients (wo einem AJAX-request gemacht werden würden) wird der code bereits ausgeführt haben.
  • Recht. Die Auswahl einer Option aus einem select-Feld und basierend auf dem übergebenen Wert durch eine Ajax-Anfrage füllen seine Nachfolger select-box ist eine sehr einfache und sehr übliche Sache. Ich bin andere zu Fragen, wie machen die solche Sachen in Spring MVC. Es bedeutet nicht, dass das, was geschehen soll, nur in einer Weise, die ich zeige hier. Es ist die Sache, die mir einfiel und meine Annahmen vielleicht falsch. Ich könnte die XML-Antwort des Ajax-aber hier, denke ich, das Ding ist nicht geschehen, weil ein controller zugeordnet werden, der mit einer JSP-Seite, die zurückkehren konnten, komplexe Datenstrukturen
  • bitte schauen Sie auf hyness die Antwort von unten. Müssen Sie ändern die HTML mit jquery anstelle von server-seitigen code. Eine alternative wäre die Rückkehr html-Code anstelle von json (ajax), aber ich würde es vorziehen, den ehemaligen Ansatz.
InformationsquelleAutor Tiny | 2012-08-08
Schreibe einen Kommentar