我正在将Liferay portlet从6.0迁移到Liferay 7.0,而我遇到的许多障碍之一就是包含了我的自定义taglib.
我遵循以下建议:在Liferay 7中创建自定义taglib,但我的portlet无法加载taglib,记录以下错误:
09:50:48,566 ERROR [http-nio-8080-exec-10][FreeMarkerManager:208] Unable to add taglib my_tags to context
FreeMarker template error:
freemarker.template.TemplateModelException: Error while loading tag library for URI "/META-INF/my_tags.tld" from TLD location "servletContext:/META-INF/my_tags.tld"; see cause exception.
at freemarker.ext.jsp.TaglibFactory.get(TaglibFactory.java:260)
at com.liferay.portal.template.freemarker.internal.FreeMarkerManager$TaglibFactoryWrapper.get(FreeMarkerManager.java:647)
at com.liferay.portal.template.freemarker.internal.FreeMarkerManager.addTaglibSupport(FreeMarkerManager.java:205)
at com.liferay.taglib.util.ThemeUtil.doIncludeFTL(ThemeUtil.java:276)
at com.liferay.taglib.util.ThemeUtil.doDispatch(ThemeUtil.java:157)
at com.liferay.taglib.util.ThemeUtil.includeFTL(ThemeUtil.java:100)
at com.liferay.taglib.util.ThemeUtil.include(ThemeUtil.java:82)
Run Code Online (Sandbox Code Playgroud)
但是,我的捆绑JAR 确实包含META-INF/my_tags.tld
令我印象深刻的是,当我的JSP加载时,错误不会发生,而是在主题的FreeMarker模板中.显然我的JSP在那时甚至没有被加载.
我的门户网站中的每个页面都会抛出错误,而不仅仅是那些包含我的portlet的页面(如果主题已经无法访问taglib,则会出现这种错误)
捆绑JAR的结构是:
com/
content/
META-INF/
+--- resources/
MANIFEST.MF
taglib-mappings.properties
my_tags.tld
OSGI-INF/
WEB-INF/
Run Code Online (Sandbox Code Playgroud)
由bnd任务生成的MANIFEST.MF包含以下依赖项:
Require-Capability: osgi.extender;osgi.extender="jsp.taglib";uri="/META-INF/my_tags.tld"
Run Code Online (Sandbox Code Playgroud)
该文件taglib-mappings.properties包含:
my_tags=/META-INF/my_tags.tld
Run Code Online (Sandbox Code Playgroud)
我还尝试将.tld文件放在WEB-INF/tld …
我在liferay 6.2上工作了应用程序显示模板,我使用freemarker帮助分页liferay的动态数据列表.当我升级到liferay 7时,这是一个问题.Liferay 7使用代码<#assign records = ddlDisplayTemplateHelper.getRecords(reserved_record_set_id)>获取记录.
旧代码:
<#assign DDLRecordLocalService = serviceLocator.findService("com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalService")> <#assign records = DDLRecordLocalService.getRecords(reserved_record_set_id)> <#assign totalRecord = DDLRecordLocalService.getRecordsCount(reserved_record_set_id, 0) >
它不起作用.
所以我尝试<#assign serviceLocator = staticUtil["com.liferay.portal.template.ServiceLocator"]>但staticUtil得到一个错误.
以下评估为null或缺失:==> staticUtil [在模板"20115#20159#21387"第9行,第27列]提示:如果已知失败的表达式合法地引用有时为null或缺失的内容
在portal-ext.properties中我添加了:
freemarker.engine.restricted.classes=
freemarker.engine.restricted.packages=
freemarker.engine.restricted.variables=
Run Code Online (Sandbox Code Playgroud) 我是liferay 7的新手,我想使用ldap将liferay 7与CAS服务器集成.
我的liferay的版本是7.0.2 GA3,CAS服务器的版本是3.5.2,我正在使用opendj活动目录.
我在localhost上安装了liferay:8080,CAS服务器在ssl上的一台服务器上,ldap在同一台服务器上.
我已经成功地将CAS与ldalp集成,我可以从ldap用户登录CAS服务器.在此之后,我在liferay中配置了CAS身份验证,该身份验证位于此CAS选项卡下的Configuration-> Instance Setting-> Authentication中.当我尝试登录即时获取以下网址时:
HTTP://本地主机:8080 /票务= ST-36-tP25deAgea9pUfwEcf6V-cas01.example.org
虽然门票正在生成,但我无法访问管理面板.
请帮助,谢谢你的推荐
我需要一个Liferay Web表单的简单扩展,以增强对liferay 7 Web表单中的数据的文件附件.
还需要将此文件作为附件发送给注册用户.
我知道如何在liferay 6.2中实现此功能,但不是关于liferay 7.我使用的是liferay 7 GA-5 CE.
任何帮助赞赏.
Liferay 7使用SennaJS作为其单页应用程序引擎,以便在表单提交和导航期间加载和替换门户页面的某些部分.有时这个功能会干扰我的用例,那么如何禁用它呢?
虽然我对Liferay 6.2中的CustomSQLUtil类没有任何问题,但是我在Liferay 7中遇到了这个类的新版本的问题.的确,get方法返回null而不是预期的查询.
有人复制了吗?
以下是我在Eclipse Mars中的最后一次测试的描述:
compileOnly group:"com.liferay",name:"com.liferay.portal.dao.orm.custom.sql",version:"1.0.5"
在gradle刷新之后,我能够在我的FooFinderImpl类中使用CustomSQLUtil类来检索适当的查询.
此查询已写入default.xml文件,该文件被放入sray/custom-sql文件夹中,如Liferay 7文档中所述:
https://dev.liferay.com/develop/tutorials/-/knowledge_base/7-0/custom-sql
我已经尝试了很多地方(在META-INF,在ressources ..),我甚至尝试扩展CustomSQL本机类来获取配置,但CustomSQLUtil类的get方法返回总是null而不是sql查询.
PS:我注意到这个新的"CustomSQLUtil.get"方法现在需要2个参数,除了查询ID之外还要求一个类.在这个类参数中,我输入了"Foo.class"值.
有人知道是否有配置要做?是否必须配置classpath或bundlecontext?
我正在使用 Liferay 7 GA 4。左侧是 Liefray 菜单(控制面板、用户等...)
我想为普通用户删除此菜单,并使其仅对管理员可见。
任何人都可以帮助我找到如何做到这一点?
非常感谢提前
在Liferay 7中,我已经将一个模块JAR放入了deploy/,然后我通过Gogo Shell卸载了它,现在我想再次安装它。
问题:当我再次将其复制到deploy/我收到此错误:
INFO [com.liferay.portal.kernel.deploy.auto.AutoDeployScanner][AutoDeployDir:252] Processing httpclient-osgi-4.5.3.jar
WARN [fileinstall-/home/nico/liferay/osgi/modules][org_apache_felix_fileinstall:103] Failed to update bundle: /home/nico/liferay/osgi/modules/httpclient-osgi-4.5.3.jar with ID 1088. The bundle has been uninstalled
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
我正在尝试在osgi环境(Liferay DXP)中使用JAXB 2.2.11。我在创建JAXBContext时遇到问题。基于在研究像发现了一些其他来源的这个和这个,我已确定,在OSGi容器中,我需要提供JAXB实例化上下文正确的类加载器。所以我有这样的代码:
ClassLoader cl package.with.jaxb.objects.ObjectFactory.class.getClassLoader();
JAXBContext jc = JAXBContext.newInstance("package.with.jaxb.objects ", cl);
这段代码导致空指针异常与以下堆栈跟踪:
Caused by: java.lang.NullPointerException
at javax.xml.bind.ContextFinder.handleClassCastException(ContextFinder.java:129)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:201)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:146)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:371)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:446)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:409)
Run Code Online (Sandbox Code Playgroud)
查看ContextFinder的源,我可以看到context在第129行中该值必须为null:
throw handleClassCastException(context.getClass(), JAXBContext.class);
我认为问题可能是我的模块依赖于jaxb-api 2.2.11,但是jaxb-impl类是由rt.jar在运行时提供的,并且可能比2.2.11更新,因为Liferay DXP在JDK 1.8上运行。为了解决这个问题,我尝试将jaxb-impl.jar 2.2.11作为依赖项包含在我的osgi模块中,并认为jaxb-api和jaxb-impl版本会匹配。之后,尝试使用与上述相同的代码创建JAXBContent会导致以下错误:
ClassCastException: attempting to cast jar:file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/rt.jar!/javax/xml/bind/JAXBContext.class to bundleresource://623.fwk616113009:13/javax/xml/bind/JAXBContext.class. Please make sure that you are specifying the proper ClassLoader.
Run Code Online (Sandbox Code Playgroud)
根据此消息的外观,实例化的JAXBContext来自通过rt.jar加载的JAXBContext版本。这让我非常困惑,因为我希望使用模块的类加载器加载的JAXBContext版本,因为我已经在模块中包含jaxb-impl.jar,并且指定了模块的类加载器为我对JAXBContext.newInstance的调用。谁能阐明我如何使jaxb 2.2.11在osgi容器中工作?
*请注意,我无法升级模块所使用的jaxb-api的版本,因为JAXB代码实际上位于需要jaxb 2.2.11的第三方jar中(目前我刚刚从等式中删除了第三方jar通过编写一些测试JAXB代码)。
我们正在使用 Liferay 7.3 (CE) 并试图通过“页面片段”来包含“内容页面”的相对较新的功能。我们能够使用<lfr-widget-WIDGETALIAS>标记开发已经包含 portlet(在内容页面的上下文中称为“小部件”)的页面片段。到目前为止,这是有效的。
现在,我们正在尝试准备嵌入应用了特殊 portlet 配置的portlet 的页面片段。例如,我们想要准备一个页面片段,它只显示一个资产发布者 portlet,该 portlet 被配置为列出来自预定义类别的 WebContent 文章。用户应该能够将该片段放到页面上,而不必关心资产发布者 portlet 的配置。
我们没有找到任何直接的方法来实现这一点——我们的第一个猜测是,配置可以写成<lfr-widget-...>标签的属性或内容,但被 liferay 文档中的一个提示阻止了,即没有有效的属性或内容可以附加到该标签.
是否有人对如何在应用预定义的 Portlet 配置的页面片段中嵌入 Portlet 有所了解?(包括开箱即用的 Liferay portlet?)