我正在尝试将AJAX请求发送到Portlet,并且它可以正常工作。我向您展示我的代码,并在进一步说明之后:

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(“来自AJAX的数据是:” +运算符)上的运算符String。它是一个null(如果我使用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");


让我知道这是否有效

07-24 17:22