liferay 7.1 b3将portlet嵌入片段中

时间:2018-06-18 13:40:01

标签: java liferay portlet liferay-7

我正在尝试liferay 7.1 b3,我想在页面片段中嵌入一个portlet。我查看了最新的可用文档here,其中说为了在页面片段中嵌入portlet小部件,我所要做的就是添加

"com.liferay.fragment.entry.processor.portlet.alias=my-custom-portlet"
@Component属性中的

属性,在这种情况下,别名(my-custom-portlet)是我将用于在片段中包含portlet的别名。

然后在我的自定义页面片段中,我必须包含lfr-widget标记,其后缀由com.liferay.fragment.entry.processor.portlet.alias属性定义。所以在我的情况下,它应该是<lfr-widget-my-custom-portlet />

麻烦的是我甚至无法用上面的内容创建页面片段。我收到以下错误:

  

alias my-custom-portlet没有可用的小部件。

另一方面,如果我使用liferay portlet(例如在他们自己的示例中为<lfr-widget-nav/>)尝试,则会正确显示nav portlet。还有其他人试过吗?任何反馈都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题,对我来说解决方案是避免在portlet名称中出现破折号!我花了很长时间才弄清楚这个问题,所以我想如果有人遇到同样的问题并且遇到这篇文章,我会在这里发布。
因此,例如,不要写"javax.portlet.name=my-custom-portlet"来写"javax.portlet.name=myCustomPortlet"
Fragment属性仍然可以包含任何破折号:"com.liferay.fragment.entry.processor.portlet.alias=my-custom-portlet"

答案 1 :(得分:0)

我解决了。有几件事需要考虑。

首先,我使用Eclipse生成了mvc-portlet,并将旧版本的内核依赖项放在build.gradle文件中。我把它们改成了:

compileOnly group: 'com.liferay.portal', name: 'com.liferay.portal.kernel', version: '3.0.1'
compileOnly group: 'com.liferay.portal', name: 'com.liferay.util.taglib', version: '3.0.0'

其次,在我添加的@Component列表中的portlet的property { ... }注释中:

"com.liferay.fragment.entry.processor.portlet.alias=my-custom-portlet",
"com.liferay.portlet.application-type=widget",
"com.liferay.portlet.application-type=full-page-application",
"javax.portlet.name=my-custom-portlet",

除了已经存在的内容。

所以在我的情况下, @Component 看起来像

@Component(
    immediate = true,
    property = {
        "com.liferay.portlet.display-category=category.sample",
        "com.liferay.portlet.instanceable=true",
        "javax.portlet.display-name=my-custom-portlet Portlet",
        "javax.portlet.init-param.template-path=/",
        "javax.portlet.init-param.view-template=/view.jsp",
        "javax.portlet.resource-bundle=content.Language",
        "javax.portlet.security-role-ref=power-user,user",
        "javax.portlet.name=my-custom-portlet",
        "com.liferay.fragment.entry.processor.portlet.alias=my-custom-portlet",
        "com.liferay.portlet.application-type=widget",
        "com.liferay.portlet.application-type=full-page-application",
        "com.liferay.portlet.add-default-resource=true"
    },
    service = Portlet.class
)
public class MyCustomPortlet extends MVCPortlet {

并且 build.gradle 文件看起来像

dependencies {
    compileOnly group: 'com.liferay.portal', name: 'com.liferay.portal.kernel', version: '3.0.1'
    compileOnly group: 'com.liferay.portal', name: 'com.liferay.util.taglib', version: '3.0.0'

    compileOnly group: "javax.portlet", name: "portlet-api", version: "2.0"
    compileOnly group: "javax.servlet", name: "javax.servlet-api", version: "3.0.1"
    compileOnly group: "jstl", name: "jstl", version: "1.2"
    compileOnly group: "org.osgi", name: "osgi.cmpn", version: "6.0.0"
}