2015-07-20 44 views
1

我似乎無法訪問我想傳遞給我的.jsp文件的數據。我已經簡化了它,它仍然不適合我。此portlet正在部署到liferay門戶。調用renderURL後,renderRequest屬性總是爲空

問題:我點擊鏈接爲下一個.jsp頁面調用renderURL。在doView()方法中,我使用setAttribute設置了一個屬性。當我在.jsp中檢索該屬性時,它將返回null。

預期輸出: 「固有值」

實際輸出: 「默認值」

NewPortlet.java(控制器)

public class NewPortlet extends MVCPortlet { 

    @Override 
    public void doView(RenderRequest request, RenderResponse response) 
      throws IOException, PortletException { 
     request.setAttribute("test", "Proper Value"); 
     String path = ParamUtil 
       .getString(request, "path", "/html/new/view.jsp"); 
     include(path, request, response); 
    } 
} 

view.jsp的

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> 

<portlet:defineObjects /> 

<portlet:renderURL var="testURL"> 
    <portlet:param name="path" value="/html/new/edit.jsp"/> 
</portlet:renderURL> 
<p><a href="<%= testURL %>">Click me!</a></p> 

edit.jsp文件

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> 
<%@page import="com.liferay.portal.kernel.util.ParamUtil"%> 

<portlet:defineObjects /> 
<% 
String test = ParamUtil.getString(renderRequest, "test", "default value"); 
%> 
<p><%= test %></p> 
+0

那麼,你是設定doView方法的屬性,並在jsp中獲得的參數。它肯定會返回你爲空,因爲不會有任何參數集名爲測試 –

回答

2

我不確定你有什麼確切的用例。

但是,這裏的問題是,你正在設置屬性,並試圖獲取參數,因此它返回null。

爲了解決你的問題,如代碼,使用renderRequest.getAttribute("test")或使用EL,${test}

+1

謝謝,這就是爲什麼一雙額外的眼睛總是有用的。一旦你足夠長的時間盯着你的代碼,這些類型的錯誤就會變得不可見 – BoDidely

1

的 「view.jsp的」 所指 「edit.jsp文件」 使用portlet:renderURL並可能是一個問題。 The render requests may be executed sequentially or in parallel without any guaranteed order.

我不知道爲什麼你的工作流程是這種方式(即在doView方法中設置參數),但嘗試actionURL而不是renderURL。

+0

雖然這不是問題,感謝您提出這一點。我將使用一個actionURL – BoDidely