服务生成器Liferay关系

时间:2016-09-03 14:12:58

标签: many-to-many liferay crud liferay-service-builder

我有"存储"门户: enter image description here

我可以点击"添加图书":

enter image description here

但我需要有机会在我的书中添加作者姓名。所以我创建了新项目,新的服务构建器和新的实体" author",现在我也可以添加作者了。但是当我点击"添加书籍时,如何与现有作者一起制作下拉菜单?#34;?如何用新表绑定该字段 - " author"?

1 个答案:

答案 0 :(得分:4)

您不需要为作者创建另一个项目,在与图书实体添加作者实体相同的服务构建器中,并添加对另一个将保存书籍和作者主键的表的引用。 service.xml可能是:

<service-builder package-path="com.myproject.db">
<author>SO</author>
<namespace>myp</namespace>
<entity name="Book" local-service="true" remote-service="true" cache-enabled="false">
<column name="bookId" type="long" primary="true" />
<column name="name" type="String" />
<column name="description" type="String" />
<column name="price" type="long" />
<column name="author" type="Collection" entity="Author" mapping-table="Author_Books"/>
</entity>
<entity name="Author" local-service="true" remote-service="true" cache-enabled="false">
<column name="authorId" type="long" primary="true" />
<column name="authorName" type="String" />
<column name="books" type="Collection" entity="Book" mapping-table="Author_Books" />
</entity>
</service-builder>

当您部署此portlet时,它将创建另一个表myp_Author_Books,其复合键为authorIdbookId。 比在书形式的渲染方法中添加

List<Author> authorList=AuthorLocalServiceUtil.getAuthor(0, AuthorLocalServiceUtil.getAuthorCount()); renderRequest.addAttribute("listAuthor",authorList )

并在jsp中使用此属性c:forEachaui:select来创建您的下拉列表,如:

<aui:select name="author" label="Author Name">
    <c:forEach var="currAuthor" items="${listAuthor}">
        <aui:option value="${currAuthor.authorId}" label=" ${student.authorName}"></aui:option>
    </c:forEach>
</aui:select>