我有一个在Liferay平台上开发的portlet,我在其中添加了从URL获取查询参数值的逻辑。我有网站:http://localhost:8080/web/guest/example,现在这个网站是从另一个不在Liferay中的外部网站调用的,其末尾是查询参数:http://localhost:8080/web/guest/example?value=test。在Liferay Portlet代码中,我已应用逻辑从URL中获取不起作用的Parameter值。它返回" null"值:
HttpServletRequest httpReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(request));
String myValue = httpReq.getParameter("value");
System.out.println(myValue);
我也尝试过这种方式,但是得到了相同的" null" Query参数的值:
HttpServletRequest httpRequest = PortalUtil.getHttpServletRequest(request);
String myValue = httpRequest.getParameter("value");
System.out.println(myValue);
任何建议我在这里做错了什么或如何从外部网站获取查询参数值?
答案 0 :(得分:1)
如果您碰巧设置了
<render-weight>0</render-weight>
<ajaxable>true</ajaxable>
在liferay-portlet.xml
中,portlet将通过Ajax呈现,不再位于同一HTTP-Request中。我已经尝试过了:如果没有这些设置,您的代码(第一个替代方案)运行良好(使用doView
方法)。
然而,依赖访问随机请求参数(在门户网站中)的不良做法无论如何......您应该构建一个完整的门户网站URL或使用Liferay的友好URL功能。这样你就可以真正进入门户世界而不是随机的servlet / portlet混合。
答案 1 :(得分:1)
我在doView()
内尝试了以下内容,它对我有用:
HttpServletRequest httpReq = PortalUtil.getHttpServletRequest(renderRequest);
HttpServletRequest httpOrigReq = PortalUtil.getOriginalServletRequest(httpReq);
String myValue = httpOrigReq.getParameter("value");
唯一的区别(可能是)我使用了RenderRequest对象。 (因为我没有看到你request
- 对象的类型。)