gpt4 book ai didi

liferay - 使用 Liferay 服务构建器访问数据库中的现有表

转载 作者:行者123 更新时间:2023-12-02 16:06:19 27 4
gpt4 key购买 nike

我正在编写一个 portlet,它需要从由不同服务构建器 portlet 创建的 liferay 数据库中的一组表中读取。

我尝试复制 service.xml 并构建服务,但我得到的只是:

BeanLocator尚未设置

是否有一种简单的方法来编写第二个 portlet,它可以访问这些现有的表,并且可以将服务构建器配置为执行此操作,而不是尝试重新创建已有的内容?

如果可能的话,我不想将其添加到原始 portlet 中,因为这些表保存了各种其他 portlet 可能需要访问的信息,并且在一个部署中拥有大量 portlet 将使维护变得令人头疼。

最佳答案

要访问不同 portlet 中服务的相同表,请勿在每个 portlet 中重新创建服务。相反,在一个 portlet 中创建服务并复制其 docroot/WEB-INF/lib/<pluginmame>-portlet-service.jardocroot/WEB-INF/lib/其他 portlet 的目录。让我们看一个例子。

假设您有以下 service.xml在名为 person-portlet 的 portlet 中:

<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>

像往常一样,您生成服务并在原始 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" %>
<%@ 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-service.jar来自person-portlet/docroot/WEB-INF/lib目录到multiple-hello-portlet/docroot/WEB-INF/lib如果您在同一门户中部署了两个 portlet,则可以使用为 person-portlet 创建的服务在 multiple-hello-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 中找到它们。 .

关于liferay - 使用 Liferay 服务构建器访问数据库中的现有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9570318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com