AJAX 在 liferay portlet 上

AJAX on liferay portlets

我正在尝试向 portlet 发送 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);
        }
});

和 serveResource

@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 操作按下输入时,带有 id 结果的 div 加载 8(服务器响应写入 jsonFeed.put("result", 8) ; 8 仅用于测试)。它不起作用的是 _log.info("The data from AJAX are: " + operators) 上的 operators String;它是空字符串(如果我使用 resourceRequest.getParameter("operators");)或空字符串(如果我使用 ParamUtil.getString(resourceRequest, "operators");)。

我做错了什么?我该怎么做才能获得这个价值?

非常感谢。

PS:在客户端,我也试过这个:

jQuery.getJSON(url, {operators:operators}, function(data) 
{
    jQuery('#result').html(data.result);
});

PS: 也发表在 Liferay forums

你能不能把 operators 改成 operators1 这样看起来像 {operators1 : operators}

可能是命名空间的问题,也许你可以试试

data: {"<portlet:namespace />operators" : operators}

可能会尝试在您的 serveResource 方法代码中获取 httpRequest,例如:

HttpServletRequest request = PortalUtil.getHttpServletRequest(resourceRequest);
String operators = ParamUtil.getString(resourceRequest, "operators");

让我知道这是否有效