我正在尝试向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
答案 0 :(得分:3)
您可以将operators
更改为operators1
,以便它看起来像{operators1 : operators}
或
可能是由于命名空间,可能是你可以尝试使用
data: {"<portlet:namespace />operators" : operators}
或
可能会尝试在您的serveResource
方法代码中获取httpRequest,如:
HttpServletRequest request = PortalUtil.getHttpServletRequest(resourceRequest);
String operators = ParamUtil.getString(resourceRequest, "operators");
如果有任何效果,请告诉我