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