liferay portlet上的AJAX

时间:2015-01-05 16:18:32

标签: jquery ajax liferay portlet

我正在尝试向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上的运算符String(“来自AJAX的数据是:”+运算符);它是一个null(如果我使用resourceRequest.getParameter(“运算符”);)或一个空字符串(如果我使用ParamUtil.getString(resourceRequest,“运算符”);)。

我做错了什么?我该怎么做才能收到这个价值?

非常感谢。

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

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

PS:也发布在Liferay forums

1 个答案:

答案 0 :(得分:3)

您可以将operators更改为operators1,以便它看起来像{operators1 : operators}

可能是由于命名空间,可能是你可以尝试使用

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

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

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

如果有任何效果,请告诉我