Liferay Portlet Response:如何设置状态码?
Liferay Portlet Response: how to set status code?
我有一个简单的方法在我的 liferay portlet 中接受 PortletResponse 和 PortletRequest
public void remove(PortletResponse response, PortletRequest request) {
}
我想将响应状态设置为 404,就像我可以通过 httpResponse.sendError(HttpServletResponse.SC_BAD_REQUEST)
对 HttpServletResponse 做的那样
你能告诉我怎么做吗?
Portlet Specification 2.0有什么要说的-您只能在处理资源请求时设置响应状态:
If the portlet want to set a response status code it should do this
via setProperty
with the key ResourceResponse.HTTP_STATUS_CODE
.
也就是说,你可以在服务资源时这样设置响应状态码:
resourceResponse.setProperty(ResourceResponse.HTTP_STATUS_CODE,
Integer.toString(HttpServletResponse.SC_BAD_REQUEST));
使用 Liferay,您可以获得底层 HttpServletResponse
的实例并在那里设置状态代码。门户网站将 return 发送给客户端。这样,您可以设置任何门户请求的响应状态,而不仅仅是资源请求。
HttpServletResponse httpServletResponse = PortalUtil.getHttpServletResponse(portletResponse);
httpServletResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST);
但是,强烈反对这种做法,Olaf Kock 的回答中也有解释。查看它以获得更大的图片。
除了 Tomas Pinos 的回答(请接受他的回答):请注意,portlet 永远不会由 HttpServletRequest 直接传送 - 它嵌入在门户生成的页面中。因此,HTTP 响应代码在门户世界中没有任何意义(对于 portlet):页面可能仍然存在,只是包含或不包含有问题的 portlet - 门户的职责是显示它喜欢的任何内容。
此规则的唯一例外是 Tomas 正确描述的内容:处理资源请求时,您正在提供独占内容 - 因此您可以选择对请求执行更多操作,而不仅仅是管道 HTML否则将嵌入到由其他人生成的页面中(门户,连同其他未知的 portlet)
我有一个简单的方法在我的 liferay portlet 中接受 PortletResponse 和 PortletRequest
public void remove(PortletResponse response, PortletRequest request) {
}
我想将响应状态设置为 404,就像我可以通过 httpResponse.sendError(HttpServletResponse.SC_BAD_REQUEST)
你能告诉我怎么做吗?
Portlet Specification 2.0有什么要说的-您只能在处理资源请求时设置响应状态:
If the portlet want to set a response status code it should do this via
setProperty
with the keyResourceResponse.HTTP_STATUS_CODE
.
也就是说,你可以在服务资源时这样设置响应状态码:
resourceResponse.setProperty(ResourceResponse.HTTP_STATUS_CODE,
Integer.toString(HttpServletResponse.SC_BAD_REQUEST));
使用 Liferay,您可以获得底层 HttpServletResponse
的实例并在那里设置状态代码。门户网站将 return 发送给客户端。这样,您可以设置任何门户请求的响应状态,而不仅仅是资源请求。
HttpServletResponse httpServletResponse = PortalUtil.getHttpServletResponse(portletResponse);
httpServletResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST);
但是,强烈反对这种做法,Olaf Kock 的回答中也有解释。查看它以获得更大的图片。
除了 Tomas Pinos 的回答(请接受他的回答):请注意,portlet 永远不会由 HttpServletRequest 直接传送 - 它嵌入在门户生成的页面中。因此,HTTP 响应代码在门户世界中没有任何意义(对于 portlet):页面可能仍然存在,只是包含或不包含有问题的 portlet - 门户的职责是显示它喜欢的任何内容。
此规则的唯一例外是 Tomas 正确描述的内容:处理资源请求时,您正在提供独占内容 - 因此您可以选择对请求执行更多操作,而不仅仅是管道 HTML否则将嵌入到由其他人生成的页面中(门户,连同其他未知的 portlet)