要訪問不同portlet中服務的相同表,請不要在每個portlet中重新創建服務。相反,在一個portlet中創建服務並將其docroot/WEB-INF/lib/<pluginmame>-portlet-service.jar
複製到其他portlet的docroot/WEB-INF/lib/
目錄中。讓我們看一個例子。
假設你有以下的稱爲person-portlet
門戶service.xml
:
<service-builder package-path="br.com.seatecnologia.stackoverflow.person">
<author>brandizzi</author>
<namespace>StackOverflowPerson</namespace>
<entity name="Person" local-service="true" remote-service="false">
<column name="personId" type="long" primary="true" />
<column name="name" type="String" />
<column name="age" type="int" />
</entity>
</service-builder>
您生成的服務,並用它在原有的門戶,像往常一樣。例如,您可以創建一個JSP與人註冊和上市的人一種形式:
<%@page import="br.com.seatecnologia.stackoverflow.person.service.PersonLocalServiceUtil"%>
<%@page import="br.com.seatecnologia.stackoverflow.person.model.Person"%>
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>
<portlet:actionURL name="addPerson" var="url" />
<aui:form action="<%= url %>" name="fm" method="POST">
<aui:fieldset>
<aui:input name="name" />
<aui:input name="age" />
<aui:button type="submit" />
</aui:fieldset>
</aui:form>
<ul>
<% for (Person person : PersonLocalServiceUtil.getPersons(-1, -1)) { %>
<li><%= person.getName() %> : <%= person.getAge() %></li>
<% } %>
</ul>
現在,假設你需要另一個portlet,某種的Hello World的報告提出了問候消息給所有註冊人。您可以創建一個新的portlet插件 - 稱爲(multiple-hello-portlet
),然後將的文件從person-portlet/docroot/WEB-INF/lib
目錄複製到multiple-hello-portlet/docroot/WEB-INF/lib
。 如果您同時在同一個portal_中部署了 portlet,則您也可以在multiple-hello-portlet
中使用爲person-portlet
創建的服務。例如,您multiple-hello-portlet
可以有以下JSP 並沒有必要重新實現服務的:
<%@page import="br.com.seatecnologia.stackoverflow.person.service.PersonLocalServiceUtil"%>
<%@page import="br.com.seatecnologia.stackoverflow.person.model.Person"%>
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
<% for (Person person : PersonLocalServiceUtil.getPersons(-1, -1)) { %>
<div class="portlet-msg-info">
Hello, <%= person.getName() %>!
You are <%= person.getAge() %> years old.
</div>
<% } %>
我創建了兩個可運行的portlet這些例子之後,你可以在BitBucket找到。
它不建議使用EXT的插件,如果你都不可能避免。在這種情況下,如Brandizzi所解釋的,通過在第二個portlet的類路徑中從第一個portlet生成{portletname} -portlet-service.jar可以輕鬆避免。 – Jonny 2012-03-06 07:57:03
關於EXT插件,您有一點意見,因爲它們很難部署/取消部署/重新部署,並且最好避免,除非沒有其他適合您需要的Liferay插件類型。 – fimez 2012-03-06 15:16:06