我正在尝试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。还有其他人试过吗?任何反馈都将不胜感激。
答案 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"
}