2011-02-05 71 views
3

我使用外的現成portlet像feed.jspf的JSP中的Liferay 6:如何從Liferay portlet中的URL獲取參數?

String articleId =null; 
HttpServletRequest httpReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(renderRequest)); 
articleId = httpReq.getParameter("articleId"); 

這是給無論是在自定義portlet或.jsp文件空值,但它應該有一個值。

+0

使用的RenderRequest請求=(RenderRequest中)FacesContext.getCurrentInstance()getExternalContext()getRequestMap()得到(的「java x.portlet.request「);獲取RenderRequest – frandevel 2011-10-30 21:24:34

回答

9

當然,您可以隨時使用標準的HttpServletRequest來從中檢索您的參數。您可以通過使用PortalUtil類,就像在下面的例子中得到這個請求:

HttpServletRequest request = PortalUtil.getHttpServletRequest(portletRequest); 
String articleId = request.getParameter("articleId"); 
+0

感謝您的幫助 – 2011-02-10 07:23:58

2

當使用portlet時,每個HttpServletRequest參數都有一個前綴,用於通知參數的「類型」以及表示portlet的哪個實例要處理它的後綴。所以,參數的名稱不僅僅是「articleId」。我不知道你在使用什麼portlet,但是如果它是一個叫做portlet的,比方說,通過戰爭部署的「example」參數將被稱爲example_WAR_exampleportletwar_articleId_w2Xd

但是,您不必處理這種複雜性。如果您正在某個已經創建的portlet的JSP中工作,則應該有一個名爲renderRequest的對象,其中包含所有參數並摘錄所有這些名稱。因此,而不是檢索原始的servlet再審您的使用它:

String articleId = renderRequest.getParamenter("articleId"); 

如果這個對象沒有定義,你只需要在一些地方插入<portlet:defineObjects/>標籤和在此之後,對象將可用。

HTH。讓我們知道它是否有效!

+0

亞是正確的,但我想從url獲取articleId ...像http:// localhost:8080/author-detail?articleId = 12345 ...我可以在portlet ..jsp頁面中獲取嗎? ?? – 2011-02-07 19:13:35

+0

那麼,URL參數沒有前綴或後綴,對嗎?我不知道如何得到它(我會建議你做任何嘗試,希望它能奏效),但我想知道這個參數是如何設置的。它是如何定義的?它是否在您創建的某個portlet/hook中? – brandizzi 2011-02-07 20:44:37

+0

從liferay中的一個自定義portlet ...我打電話給其他頁面,通過定義頁面的名稱和手動傳遞參數...在它將重定向到author-detail頁面之後..在這我高一個portlet ..我高速訪問articleId在那?? ?? – 2011-02-09 04:44:52

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; 

} 
2

它的工作對我來說:

public void doView(RenderRequest request, RenderResponse response) throws 
    PortletException, IOException { 

HttpServletRequest requestInsideThePortlet = PortalUtil.getHttpServletRequest(request); 

String myURLParam = 
PortalUtil.getOriginalServletRequest(requestInsideThePortlet).getParameter("myURLParam"); 

.... 
.... 
.... 
} 
7

在我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"); 

%> 

(這結合了其他答案,從2012年7月23日特別是米格爾·馬丁內斯·吉爾的回答智慧片段在17:35

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()); 
    } 
} 

然後在你的的facelet:。

#{originalRequest.getParam('my_param')}