liferay - 如何使用 FreeMarker 将表添加到 Liferay 中的数据库?

标签 liferay liferay-6 freemarker

我想使用 FreeMarker 将表添加到我的数据库中。 我尝试使用 ExpandoTableLocalServiceUtil我的模板中的类:

<#assign expandoTable = staticUtil["com.liferay.portlet.expando.service.ExpandoTableLocalServiceUtil"] />

然后我尝试添加表格:

<#assign table = expandoTable.addTable(theme_display.getCompanyId(),"", "MYTABLE") />

但是表没有添加。

我也尝试过这种方式:

${expandoTable.addTable(theme_display.getCompanyId(),"", "ANOTHER-TABLE")}

我收到此错误:

Template processing error: "Method public static 
com.liferay.portlet.expando.model.ExpandoTable
com.liferay.portlet.expando.service.ExpandoTableLocalServiceUtil.addTable(long,java.lang.String,java.lang.String) throws
com.liferay.portal.kernel.exception.PortalException,com.liferay.portal.kernel.exception.SystemException threw an exception"

    The problematic instruction:
    ----------
    ==> ${expandoTable.addTable(theme_display.getCompanyId(),"", "ANOTHER-TABLE")} [on line 22, column 1 in eventi-theme_SERVLET_CONTEXT_/templates/portal_normal.ftl]
    ----------

    Caused by: com.liferay.portlet.expando.DuplicateTableNameException: {tableId=0}

最佳答案

Expando API 不创建数据库级表,而是创建虚拟表。检查您的数据库,您会发现几个“Expando”表。它们将包含您的所有数据。 Expando-API 的全部要点是您可以扩展数据模型,而无需在数据库上进行任何新的 DDL 级别操作(例如 CREATE TABLE)。

如果您想创建单独的表,就这样做 - 但不要使用 Expando。

正如 DuplicateTableNameException 所示,您的表已被添加。

允许一个架构评论:我将 freemarker(至少在典型用途中)视为扩展 Liferay 的 UI 级别选项,并且通常期望这种操作而不是在后端组件中而不是在前端中。

关于liferay - 如何使用 FreeMarker 将表添加到 Liferay 中的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33915220/

相关文章:

spring - 是否可以在 Liferay Hook 中使用 Spring @Autowired?

java - 在 session 中保存 - Liferay Portlet

java - Liferay 6 中不存在表

java - 如何在 FreeMarker 中汇总货币?

java - 使用 freemarker 加载 odt 文件(文档模板)。如何将odt文件生成为pdf

java - DataTable 不是 Liferay 7 上的函数

tomcat - Liferay 部署描述符(使用 Tomcat)

java - 在不设置模板加载的目录或类的情况下在 Freemarker 模板中加载模板

liferay - <aui :script> block内的"A is not defined"

java - ant java 执行完成后挂起