Liferay Portlet响应:如何设置状态代码?

时间:2015-11-10 07:26:11

标签: liferay portlet

我有一个简单的方法接受我的liferay portlet中的PortletResponse和PortletRequest

public void remove(PortletResponse response, PortletRequest request) {

}

我想将响应状态设置为404,就像我可以通过httpResponse.sendError(HttpServletResponse.SC_BAD_REQUEST)

进行HttpServletResponse一样

你能告诉我怎么做吗?

2 个答案:

答案 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)