2012-03-27 14 views
0

Ich habe ein Problem mit meinem Portlet und ich weiß nicht genau, wie man es löst. Mein Portlet fügt Informationen aus der Datenbank von liferay hinzu oder ruft diese ab, indem ein Name in zwei Textfelder eingefügt wird. Nach dem Absenden-Button drücken, sehe ich die Antwort vom Server, eine JSON-Antwort wie folgt aus:Anfragen mit AJAX in einem Portlet (Liferay)

{"id":301,"name":"Pepo"} 

Wenn ein Benutzer korrekt eingesetzt oder wenn die Suche ein gutes Ergebnis führt. Ich muss zurück in den Browser gehen, um das Portal wieder zu sehen.

Wie kann ich AJAX verwenden, um die folgende URL dynamisch vom Portlet an den Server zu übergeben, ohne die Seite danach zu aktualisieren?

http: // localhost: 8080/c/portal/json_service serviceClassName = com.liferay.test.service.TrabajadorServiceUtil & serviceMethodName = findByName & servletContextName = TrabajadorPlugin-Portlet & serviceParameters = [param1] & param1 = NameInsertedByUser

Jetzt bin ich mit dem <form> Tag wie folgt:

<% 
//Shows "New Employee" in the text field when portlet is rendered, or gets the user input and pass it as a param to the URL 
PortletPreferences prefs = renderRequest.getPreferences(); 
String employee = (String)prefs.getValue("name", "New Employee"); 
%> 

<form id="postForm" method="post" action="http://localhost:8080/c/portal/json_service"> 
    <input name="serviceClassName" type="hidden" value="com.liferay.test.service.TrabajadorServiceUtil" /> 
    <input name="serviceMethodName" type="hidden" value="create" /> 
    <input name="servletContextName" type="hidden" value="TrabajadorPlugin-portlet" /> 
    <input name="serviceParameters" type="hidden" value="[param]" /> 
    <input name="param" type="text" value="<%=employee%>" /> 
    <input type="submit" value="Submit"/> 
</form> 

Ich verstehe, wie AJAX funktioniert, aber ich brauche etwas Hilfe, um meine Funktion zu erstellen, um zu erreichen, dass die URL für GET und POST Anforderungen korrekt an den Server gesendet wird. Dies ist mein erster Versuch mit AJAX.

Vielen Dank, hoffe jemand versteht mein Problem und könnte mir helfen.

Antwort

0

Zunächst sehe ich überhaupt keinen Sinn JSON-Dienste hier zu verwenden. Schreiben Sie einfach ein gewöhnliches Portlet mit dem MVC Controller, und schreiben Sie in der Controller-Schreibaktion für entsprechende Aktionen (Speichern von Daten, Suchen usw.).

Im Controller können Sie direkt statische Methoden wie create oder findByName von der Java-Klasse com.liferay.test.service.TrabajadorServiceUtil (oder TrabajadorLocalServiceUtil) aufrufen - so machen es die Leute normalerweise.

Wenn Sie aus irgendeinem Grund wirklich JSON verwenden müssen, sollten Sie diese Aktionen natürlich mit AJAX-Aufrufen durchführen - und Ergebnisse mit JavaScript rendern.

Aktualisierung nach Frage Update:

  1. Die einfachste und korrekte Art und Weise AJAX Anfragen in Liferay zu senden wäre verwenden AlloyUI JS-Framework, das ein Teil von Liferay ist. Sie können mehr darüber, wie hier lesen damit AJAX-Anfragen senden: http://www.liferay.com/web/nathan.cavanaugh/blog/-/blogs/4733559

  2. Um Ihr Ziel zu erreichen würde ich vorschlagen process (actionrequest actRequest, ActionResponse actResponse) -Methode in Ihrem Controller/Portlet implementieren. Um haben müssen Sie, um tatsächlich Daten senden Sie es actionURL, die Sie zum Beispiel Portlets erstellen verwenden, können: actionURL tag:

    <portlet:actionURL /> oder mit Java-Code PortletURL actionUrl = portletResponse.createActionURL();

  3. Dann reichen Sie einfach Ihr Formular POST zu dieser URL und in actionRequest haben Sie Ihre Parameter.

+0

Hallo, danke für deine Antwort. Das Problem ist, dass ich ja die GET- und POST-Anfrage in JSON wie folgt sende und empfange: {"id": 301, "name": "Pepo"} Also ja, ich muss AJAX benutzen, aber ich tu 'nicht Ich weiß wie. MY URL ist wie folgt: http: // localhost: 8080/c/portal/json_service? ServiceClassName = com.liferay.test.service.TrabajadorServiceUtil & serviceMethodName = findenByName & servletContextName = TrabajadorPlugin-portlet & serviceParameters = [param1] & param1 = Pepo – agapitocandemor

+0

Wo Param1 von eingefügt wird der Benutzer in einem Textfeld. Ich muss es nur am Ende der URL hinzufügen und es mit AJAX senden, so dass Sie diese leere Seite nicht sehen und Sie den Browser nicht manuell aktualisieren müssen, um zum Portal zurückzukehren. Hast du einen Vorschlag, das zu tun? Vielen Dank, dies ist mein erstes Mal mit AJAX und ich bin ein bisschen verloren. – agapitocandemor

+0

Bitte sehen Sie meine Bearbeitung, ich habe meine Frage aktualisiert. – agapitocandemor

Verwandte Themen