AJAX на портлетах liferay
Я пытаюсь отправить запрос AJAX в портлет, и он наполовину работает. Я покажу вам свой код и после объясню лучше:
JQuery AJAX:
jQuery("#operation").click(function()
{
var url = '<portlet:resourceURL id="getDataResourceURL"></portlet:resourceURL>';
var operators = jQuery('#result').html();
jQuery.ajax({
url:url,
dataType: "json",
data:{operators:operators},
success: function(data)
{
jQuery('#result').html(data.result);
}
});
И служить ресурсом
@Override
public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws PortletException, IOException
{
String resourceId = resourceRequest.getResourceID();
if (Validator.isNotNull(resourceId) && resourceId.length() != 0 && resourceId.equalsIgnoreCase("getDataResourceURL"))
{
//final String operators = resourceRequest.getParameter("operators");
String operators = ParamUtil.getString(resourceRequest, "operators");
_log.info("The data from AJAX are: " + operators);
JSONObject jsonFeed = JSONFactoryUtil.createJSONObject();
jsonFeed.put("result", 8);
resourceResponse.setContentType("application/json");
resourceResponse.setCharacterEncoding("UTF-8");
resourceResponse.getWriter().write(jsonFeed.toString());
}
}
ХОРОШО!! То, что он работает, это ответ, когда я нажимаю ввод с помощью операции id, div с результатом id загружает 8 (что ответ сервера записывается в jsonFeed.put("result", 8); 8 - только для теста). То, что не работает, это операторы String на _log.info("Данные из AJAX: " + операторы); что это пустое значение (если я использую resourceRequest.getParameter("операторы");) или пустую строку (если я использую ParamUtil.getString(resourceRequest, "операторы");).
Что я делаю неправильно? и что я могу сделать, чтобы получить это значение?
Большое спасибо.
PS: на стороне клиента я тоже пытался это:
jQuery.getJSON(url, {operators:operators}, function(data)
{
jQuery('#result').html(data.result);
});
PS: также опубликовано на форумах Liferay
1 ответ
Вы можете изменить operators
сказать operators1
так это будет выглядеть {operators1 : operators}
или же
это может быть связано с пространством имен, может быть, вы можете попробовать его как
data: {"<portlet:namespace />operators" : operators}
или же
может быть, попробуйте получить httpRequest в вашем serveResource
код метода как:
HttpServletRequest request = PortalUtil.getHttpServletRequest(resourceRequest);
String operators = ParamUtil.getString(resourceRequest, "operators");
Дайте мне знать, если это работает