我正在尝试将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");
让我知道这是否有效