2016-01-21 25 views
1

我在Liferay平臺中開發了一個portlet,其中我添加了從URL獲取查詢參數值的邏輯。我有這個網站:http://localhost:8080/web/guest/example,現在這個網站正在被另一個不在Liferay中的外部網站調用,查詢參數結束於:http://localhost:8080/web/guest/example?value=test。在Liferay Portlet代碼中,我應用了邏輯從URL中獲取不起作用的參數值。它返回「空」值:從URL獲取參數值不起作用

HttpServletRequest httpReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(request)); 
     String myValue = httpReq.getParameter("value");  
     System.out.println(myValue); 

我想這種方式太多,但得到的查詢參數相同的「空」值:

HttpServletRequest httpRequest = PortalUtil.getHttpServletRequest(request); 
     String myValue = httpRequest.getParameter("value"); 
     System.out.println(myValue); 

任何建議什麼,我做錯了什麼或怎麼能我得到來自外部網站的查詢參數值?

+0

您是否嘗試使用'request.getQueryString()'獲取它? –

+0

我認爲你可能錯過了liferay-portlet.xml文件中的 false Gautam

回答

1

我只是想裏面doView()以下和它的作品對我來說:

HttpServletRequest httpReq = PortalUtil.getHttpServletRequest(renderRequest); 
HttpServletRequest httpOrigReq = PortalUtil.getOriginalServletRequest(httpReq); 
String myValue = httpOrigReq.getParameter("value"); 

唯一的區別(可能)是我用的RenderRequest對象。 (因爲我沒有看到您的request -object的類型。)

+0

我使用了RenderRequest對象,它爲我工作。謝謝!!! – TechPro

1

如果發生設置

<render-weight>0</render-weight> 
    <ajaxable>true</ajaxable> 
liferay-portlet.xml

,該portlet將通過Ajax在同一個HTTP請求呈現,不再。我試過了:沒有這些設置,你的代碼(第一種選擇)運行良好(在doView方法中)。

無論如何,依賴訪問隨機請求參數(在門戶中)是一種不好的做法......您應該更願意構建完整的門戶網站URL或使用Liferay的friendly-URL功能。這樣你就真正進入了門戶世界,而不是隨機的servlet/portlet組合。

+0

嗨Olaf Kock,我在本地檢查了我的liferay-portlet.xml,我沒有有設置相關的渲染重量和ajaxable,但我仍然得到空值的參數。從外部站點將會有幾個值作爲查詢參數,它們引用Liferay中的同一個Portlet,並且通過查詢參數傳遞的那些值必須插入到數據庫中。如果我需要創建friendly-URL不同的值,比如在URL末尾放置?value = test,Liferay將不接受查詢參數作爲友好URL。 – TechPro

+0

你可能想發佈更多的代碼,因爲你上面發佈的代碼適合我。 –

+0

Olaf Kock,我有表單portlet,當用戶輸入詳細信息並提交時,它將數據輸入數據庫。在view.jsp中,我有輸入名稱和詳細信息(如FisrtName ....)的字段....然後調用Java類函數將輸入的數據插入數據庫。爲了測試查詢參數,我沒有在代碼中提供任何值,只是使用上面的代碼從URL獲取查詢參數。在本地測試中,我只提供查詢參數,如:http:// localhost:8080/web/guest/example?value = test並填寫表單並提交。我作爲查詢參數獲取的值爲null。 – TechPro