Запросы с помощью AJAX в портлете (Liferay) - PullRequest
0 голосов
/ 27 марта 2012

У меня проблема с моим портлетом, и я не знаю точно, как ее решить.Мой портлет добавляет или получает информацию из БД liferay, вставляя имя в 2 текстовых поля.После нажатия кнопки отправки, я вижу ответ от сервера, ответ JSON, подобный этому:

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

Если пользователь правильно вставил или если поиск выдает хороший результат.Я должен вернуться в браузер, чтобы снова увидеть портал.

Как я могу использовать AJAX для динамической передачи следующего URL-адреса из портлета на сервер без последующего обновления страницы?

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

Теперь я использую тег <form> следующим образом:

<%
//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> 

Я понимаю, как работает AJAX, но мне нужно немногопомогите создать мою функцию, чтобы URL-адрес был правильно отправлен на сервер для запросов GET и POST.Это моя первая попытка использования AJAX.

Большое спасибо, надеюсь, что кто-нибудь поймет мою проблему и сможет мне помочь.

1 Ответ

0 голосов
/ 28 марта 2012

Прежде всего, я не вижу смысла использовать здесь JSON-сервисы.Просто напишите обычный портлет с помощью MVC Controller, и в контроллере выполняйте обработку действий для соответствующих действий (хранение данных, поиск и т. Д.).

В контроллере вы можете напрямую вызывать статические методы, такие как create или findByName, из класса java com.liferay.test.service.TrabajadorServiceUtil (или TrabajadorLocalServiceUtil) - так обычно делают люди.

Если по какой-то причине вам действительно нужно использовать JSON, вам, конечно, следует выполнять эти действия с вызовами AJAX - и отображать результаты с помощью JavaScript.

Обновление после обновления вопроса:

  1. Самый простой и правильный способ отправки AJAX-запросов в Liferay - это использование JS-инфраструктуры AlloyUI, являющейся частью Liferay.Подробнее о том, как отправлять запросы AJAX, можно прочитать здесь: http://www.liferay.com/web/nathan.cavanaugh/blog/-/blogs/4733559

  2. Для достижения вашей цели я бы предложил реализовать метод processAction (ActionRequest actRequest, ActionResponse actResponse) в вашем контроллере /портлет.Для фактической отправки данных вам понадобится actionURL, который вы можете создать, используя, например, тег portlet: actionURL:

    <portlet:actionURL /> или с кодом Java PortletURL actionUrl = portletResponse.createActionURL();

  3. Затем просто отправьте свою форму, используя POST на этот URL, и в actionRequest у вас будут ваши параметры.

...