我有一个简单的方法接受我的liferay portlet中的PortletResponse和PortletRequest
public void remove(PortletResponse response, PortletRequest request) {
}
我想将响应状态设置为404,就像我可以通过httpResponse.sendError(HttpServletResponse.SC_BAD_REQUEST)
你能告诉我怎么做吗?
答案 0 :(得分:5)
Portlet Specification 2.0必须说什么 - 您只能在处理资源请求时设置响应状态:
如果portlet想要设置响应状态代码,它应该这样做 使用密钥
setProperty
通过ResourceResponse.HTTP_STATUS_CODE
。
这意味着,您可以在提供资源时以这种方式设置响应状态代码:
resourceResponse.setProperty(ResourceResponse.HTTP_STATUS_CODE,
Integer.toString(HttpServletResponse.SC_BAD_REQUEST));
使用Liferay,您可以获取基础HttpServletResponse
的实例并在那里设置状态代码。门户网站会将其返回给客户端。这样,您可以为任何门户请求设置响应状态,而不仅仅是资源请求。
HttpServletResponse httpServletResponse = PortalUtil.getHttpServletResponse(portletResponse);
httpServletResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST);
然而,在Olaf Kock的回答中,这种做法非常不鼓励。看到它以获得更大的图景。
答案 1 :(得分:2)
除了Tomas Pinos的回答(请接受他的回答):请注意,Portlet永远不会由HttpServletRequest直接传递 - 它嵌入在由门户生成的页面中。因此,HTTP响应代码在门户网站中没有任何意义(对于portlet):页面可能仍然存在,只包含或不包含有问题的portlet - 门户的业务是显示它喜欢的任何东西。
此规则的唯一例外是Tomas正确描述的内容:处理资源请求时,您正在提供独占内容 - 因此您可以选择对请求执行更多操作,而不仅仅是管道嵌入在其中的HTML。其他人生成的页面(门户网站,以及其他未知的portlet)