我正嘗試在一個名爲view.jsp
的JSP文件中創建portlet。我需要的是:創建liferay portlet - 如何將數據從Java類傳遞給view.jsp?
當portlet加載時,我想調用自定義Java類,我生成一個數組。我需要將該數組傳遞給
view.jsp
。
如何做到這一點?
我正嘗試在一個名爲view.jsp
的JSP文件中創建portlet。我需要的是:創建liferay portlet - 如何將數據從Java類傳遞給view.jsp?
當portlet加載時,我想調用自定義Java類,我生成一個數組。我需要將該數組傳遞給view.jsp
。
如何做到這一點?
您是否使用Liferay的create.sh
腳本創建了portlet?在這種情況下,我們需要創建一個擴展MVCPortlet
新的portlet類:
public class ArrayPortlet extends MVCPortlet {
}
此外,你將不得不改變WEB-INF/portlet.xml
文件指向它的類。通過
<portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class>
一個更換線下命名您的portlet類:
<portlet-class>br.com.seatecnologia.arrayportlet.ArrayPortlet</portlet-class>
這僅僅是設置。現在,很酷的部分:代碼!您應該創建一個方法來處理portlet的視圖。該方法應該命名爲doView()
並具有兩個參數:一個RenderRequest
和一個RendertResponse
。此外,它會拋出一些例外情況,並委託Portlet呈現給超類方法:
public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
super.doView(renderRequest, renderResponse);
}
呈現portlet之前,但是,我們創建數組:
String[] array = new String[] { "foo", "bar", "baz" };
,並把它放在接收爲RenderRequest
參數。你應該給一個名字參數 - 在這種情況下,名稱是"my-array"
:
renderRequest.setAttribute("my-array", array);
這是我們班的,完整的:
public class ArrayPortlet extends MVCPortlet {
@Override
public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
String[] array = new String[] { "foo", "bar", "baz" };
renderRequest.setAttribute("my-array", array);
super.doView(renderRequest, renderResponse);
}
}
正是通過我們值傳遞給RenderRequest
對象JSP。現在,在JSP中,我們應該「導入」RenderRequest
實例(以及其他對象),並將<portlet:defineObjects />
標記添加到JSP的開頭。在此之後,我們可以通過其名稱獲得renderRequest
對象的任何屬性。需要注意的是getAttribute()
返回Object
所以你應該返回值轉換爲正確類型的方法:
<portlet:defineObjects />
<%
String[] anArrayFromMyPortlet = (String[])renderRequest.getAttribute("my-array");
%>
現在,您只需使用您檢索的對象,如你所願:
<ul>
<% for (String string : anArrayFromMyPortlet) { %>
<li><%= string %></li>
<% } %>
</ul>
這是結果這個代碼在我的機器:
您的問題很模糊,我建議您介紹一下Portlet開發,因爲它似乎是關於基礎結構/規範的基本理解。
試圖通過給一些指點回答你的問題 - 道歉,如果他們也太模糊了:
當然這與你使用的portlet框架變化 - 上面提到的方法從底層Portlet規範(即JSR-286)
您可以通過幾種方式做到這一點:
1)您可以使用renderRequest.setAttribute("my-array", array);
2)你可以把你的數據到一個會話
request.getPortletSession().setAttribute("my-array", array);
在第二種情況下,不要忘了從會話刪除元素你的時候不再需要它了。
只是澄清一下,你的意思是view.jsp?你需要頁面渲染後的值嗎?如果是這樣,爲什 –
是的,我的意思是jsp。我想解析遠程xml並將所有數據放入數組,然後將此數組傳遞給view.jsp。我只是不想在jsp本身編寫代碼。我想用java類。 –