我在Liferay 6中使用jsp的开箱即用portlet,如feed.jspf:
String articleId =null;
HttpServletRequest httpReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(renderRequest));
articleId = httpReq.getParameter("articleId");
无论是在自定义portlet还是在.jsp文件中,它都会给出一个空值,但它应该有一个值。
答案 0 :(得分:10)
当然,您始终可以使用标准HttpServletRequest从中检索参数。您可以使用PortalUtil类获取此请求,如下例所示:
HttpServletRequest request = PortalUtil.getHttpServletRequest(portletRequest);
String articleId = request.getParameter("articleId");
答案 1 :(得分:8)
在我的Liferay- JSP 中,我使用了这个:
<!-- ... some imports... -->
<!-- ... some more imports... -->
<%@ page import="com.liferay.portal.util.PortalUtil" %>
<portlet:defineObjects /> <!-- Liferay-specific, defines renderRequest etc.-->
<%
HttpServletRequest r = PortalUtil.getHttpServletRequest(renderRequest);
String wellHole = PortalUtil.getOriginalServletRequest(r).getParameter("well_hole");
%>
(这结合了其他答案的智慧片段,特别是MiguelGilMartínez的答案,2012年7月23日17:35
答案 2 :(得分:2)
使用portlet时,每个HttpServletRequest参数都有一个前缀,用于通知参数的“类型”以及表示portlet的实例应该处理它的后缀。因此,参数的名称不仅仅是“articleId”。我不知道你在使用什么portlet,但是如果它是一个被调用的portlet,让我们说,通过war部署“example”,参数将被称为example_WAR_exampleportletwar_articleId_w2Xd
。
但是,您不必处理这种复杂性。如果您正在一些已经创建的portlet的JSP中工作,那么应该有一个名为renderRequest
的对象,其中包含所有参数并抽象所有这些名称。因此,不是检索原始的servlet请求,而是使用它:
String articleId = renderRequest.getParamenter("articleId");
如果未定义此对象,则只需在某处插入<portlet:defineObjects/>
标记,然后该对象即可使用。
HTH。如果有效,请告诉我们!
答案 3 :(得分:2)
它对我有用:
public void doView(RenderRequest request, RenderResponse response) throws
PortletException, IOException {
HttpServletRequest requestInsideThePortlet = PortalUtil.getHttpServletRequest(request);
String myURLParam =
PortalUtil.getOriginalServletRequest(requestInsideThePortlet).getParameter("myURLParam");
....
....
....
}
答案 4 :(得分:1)
对于JSF,我使用它:
@ManagedBean
@RequestScoped
public class OriginalRequest {
private HttpServletRequest getOriginalRequest() {
return PortalUtil.getOriginalServletRequest(
PortalUtil.getHttpServletRequest(
(PortletRequest) FacesContext.getCurrentInstance()
.getExternalContext().getRequest() ) );
}
public String getParam( String name ) {
return getOriginalRequest().getParameter( name );
}
public List<String> getParamNames() {
return Collections.list( getOriginalRequest().getParameterNames() );
}
}
然后在你的脸上:
#{originalRequest.getParam('my_param')}
答案 5 :(得分:0)
我尝试了你的解决方案,但渲染请求它给了我一个例外, 所以这是另一种解决方案:
public String obtainFromUrl(String keyFromWeb) {
Object outcome = null;
Map<String, Object> map = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
if (map != null) {
for (String key : map.keySet()) {
if (map.get(key) instanceof HttpServletRequestWrapper) {
HttpServletRequest request = (HttpServletRequest) ((HttpServletRequestWrapper) map.get(key))
.getRequest();
outcome = request.getParameter(keyFromWeb);
break;
}
}
}
return (String) outcome;
}