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");

Дайте мне знать, если это работает

Другие вопросы по тегам