如何在 liferay portlet 中使用 ajax 响应对象 return?
How to return an object in response using ajax in liferay portlet?
我需要 return 成功方法的字符串。
这是我在 jsp 页面中的 AJAX 代码。
<portlet:actionURL name="filterDocuments" var="filterDocuments">
<portlet:param name="action" value="filterDocuments"/>
</portlet:actionURL>
<script type="application/javascript">
var filterDto = {
page: 0,
tags: {},
search: null
};
$.ajax({
type: "POST",
url: "<%=filterDocuments%>",
data: filterDto,
success: function (msg) {
alert(msg);
}
});
</script>
这是我在后端的处理程序。
@ActionMapping(params = "action=filterDocuments")
public void filterDocuments(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException {
PrintWriter writer = PortalUtil.getHttpServletResponse(actionResponse).getWriter();
writer.write("text");
writer.flush();
writer.close();
}
结果它在警报消息中显示了一个空字符串。
如何处理?
更新
我将控制器方法更改为
@ResourceMapping(value = "filterDocuments")
public void filterDocuments(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException {
PrintWriter writer = PortalUtil.getHttpServletResponse(actionResponse).getWriter();
writer.write("text");
writer.flush();
writer.close();
}
我的 jsp url 是
<portlet:resourceURL var="ajaxResourceURL"/>
<script type="application/javascript">
var filterDto = {
page: 0,
tags: {},
search: null
};
$.ajax({
type: "POST",
url: "<%=ajaxResourceURL%>",
data: filterDto,
success: function (msg) {
alert(msg);
}
});
</script>
现在它给了我一个例外
org.springframework.web.portlet.NoHandlerFoundException: No handler found for portlet request: mode 'view', phase 'RESOURCE_PHASE', parameters map['search' -> array[''], 'page' -> array['0']]
完全控制者class
@Controller
@RequestMapping("VIEW")
@Log4j
public class SpringMVCController extends MVCPortlet {
@RenderMapping
public String view(RenderRequest request, RenderResponse response) {
String view = PropertiesConfig.getAsString("views", request);
return view;
}
@Override
public void serveResource(ResourceRequest resourceRequest,
ResourceResponse resourceResponse)
throws IOException, PortletException {
try {
PrintWriter writer = resourceResponse.getWriter();
writer.write("text");
writer.flush();
writer.close();
CaptchaUtil.serveImage(resourceRequest, resourceResponse);
} catch (Exception e) {
log.error(e.getMessage());
}
}
@ResourceMapping(value = "action=filterDocuments")
public void filterDocuments(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException {
PrintWriter writer = PortalUtil.getHttpServletResponse(actionResponse).getWriter();
writer.write("text");
writer.flush();
writer.close();
}
}
以下 is/are 您更新后的代码存在的问题:
我。您没有根据您的 portlet:actionURL
在 portlet:resourceURL
上指定 id
属性(具有必需的值)。将其更改为:
<portlet:resourceURL id="filterDocuments" var="filterDocuments" />
二。 class 中映射方法的签名与 UI 上 portlet:resourceURL
的 id 属性值不同,将其更改为:
@ResourceMapping("filterDocuments")
public void filterDocuments(ResourceRequest request, ResourceResponse response)
throws IOException, SystemException {
PrintWriter writer = response.getWriter();
writer.write("text");
writer.flush();
writer.close();
}
三。从操作 class 中删除其他 serveResource
方法,因为它仅适用于通用(默认)portlet 类型。
我需要 return 成功方法的字符串。 这是我在 jsp 页面中的 AJAX 代码。
<portlet:actionURL name="filterDocuments" var="filterDocuments">
<portlet:param name="action" value="filterDocuments"/>
</portlet:actionURL>
<script type="application/javascript">
var filterDto = {
page: 0,
tags: {},
search: null
};
$.ajax({
type: "POST",
url: "<%=filterDocuments%>",
data: filterDto,
success: function (msg) {
alert(msg);
}
});
</script>
这是我在后端的处理程序。
@ActionMapping(params = "action=filterDocuments")
public void filterDocuments(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException {
PrintWriter writer = PortalUtil.getHttpServletResponse(actionResponse).getWriter();
writer.write("text");
writer.flush();
writer.close();
}
结果它在警报消息中显示了一个空字符串。 如何处理?
更新 我将控制器方法更改为
@ResourceMapping(value = "filterDocuments")
public void filterDocuments(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException {
PrintWriter writer = PortalUtil.getHttpServletResponse(actionResponse).getWriter();
writer.write("text");
writer.flush();
writer.close();
}
我的 jsp url 是
<portlet:resourceURL var="ajaxResourceURL"/>
<script type="application/javascript">
var filterDto = {
page: 0,
tags: {},
search: null
};
$.ajax({
type: "POST",
url: "<%=ajaxResourceURL%>",
data: filterDto,
success: function (msg) {
alert(msg);
}
});
</script>
现在它给了我一个例外
org.springframework.web.portlet.NoHandlerFoundException: No handler found for portlet request: mode 'view', phase 'RESOURCE_PHASE', parameters map['search' -> array[''], 'page' -> array['0']]
完全控制者class
@Controller
@RequestMapping("VIEW")
@Log4j
public class SpringMVCController extends MVCPortlet {
@RenderMapping
public String view(RenderRequest request, RenderResponse response) {
String view = PropertiesConfig.getAsString("views", request);
return view;
}
@Override
public void serveResource(ResourceRequest resourceRequest,
ResourceResponse resourceResponse)
throws IOException, PortletException {
try {
PrintWriter writer = resourceResponse.getWriter();
writer.write("text");
writer.flush();
writer.close();
CaptchaUtil.serveImage(resourceRequest, resourceResponse);
} catch (Exception e) {
log.error(e.getMessage());
}
}
@ResourceMapping(value = "action=filterDocuments")
public void filterDocuments(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException {
PrintWriter writer = PortalUtil.getHttpServletResponse(actionResponse).getWriter();
writer.write("text");
writer.flush();
writer.close();
}
}
以下 is/are 您更新后的代码存在的问题:
我。您没有根据您的 portlet:actionURL
在 portlet:resourceURL
上指定 id
属性(具有必需的值)。将其更改为:
<portlet:resourceURL id="filterDocuments" var="filterDocuments" />
二。 class 中映射方法的签名与 UI 上 portlet:resourceURL
的 id 属性值不同,将其更改为:
@ResourceMapping("filterDocuments")
public void filterDocuments(ResourceRequest request, ResourceResponse response)
throws IOException, SystemException {
PrintWriter writer = response.getWriter();
writer.write("text");
writer.flush();
writer.close();
}
三。从操作 class 中删除其他 serveResource
方法,因为它仅适用于通用(默认)portlet 类型。