Достаточно часто при разработке mvc-портлетов появляется необходимоть в асинхронном обновлении тех или иных компонентов. Обычной реализацией данного функционала является AJAX'овый запрос на сервер в виде вызова liferay action. Подробнее об этом можно прочитать в данной статье. Альтернативой являются такие же ajax'овые запросы, но выполненые в виде сервисов liferay. Принципы построения сервисов описаны в предыдущей статье, здесь лишь рассматриваются особенности получения данных в формате json простым get'овым запросом.
1. Как и в SOAP необходимо объявить разрешенные IP адреса. Кроме того можно ограничить типы обрабатываемых HTTP запросов. Для этого отредактируем portal-ext.properties
jsonws.web.service.public.methods=*
json.servlet.hosts.allowed=127.0.0.1, SERVER_IP
jsonws.servlet.hosts.allowed=127.0.0.1,SERVER_IP
2. Изменим класс TestEntityServiceImpl.
@JSONWebService("test-service")
public class TestEntityServiceImpl extends TestEntityServiceBaseImpl {
public String add(int a, int b) {
return String.valueOf(a + b);
}
}
3. Пересобираем сервисы
ant build-service
3. Проверим работоспособность.
http://localhost:8080/TestServiceProject-portlet/api/secure/jsonws/test-service/add?a=1&b=1
4. Пример использования
$.get("http://localhost:8080/TestServiceProject-portlet/api/secure/jsonws/test-service/add",
{
a : 1,
b : 1
},
function(response) { alert(response); });