Que*_*ueg 5 java portlet spring-mvc liferay
假设portlet X部署到Liferay并且映射了友好的URL.假设用户通过映射的URL进入Liferay Portal,但门户网站中不存在portlet - 它已部署但未添加到页面中.
我的问题是当用户使用映射的URL时没有任何反应 - 门户网站没有提供视觉反馈,目标 portlet不存在.
我怎么能改变呢?我需要向用户提供某种警报/通知......
- 编辑 -
我不需要使用第二个portlet来检查是否存在另一个portlet.
最亲切的问候,
AFAIK,没有自然的方法可以实现这一点。Portlet并不总是需要安装在页面上。所以,这种行为是很正常的。
我能想到的一个相当老套的解决方案:
ThemeDisplay使用 JSP 中的对象来获取JSP 范围内的<liferay-theme:defineObjects />隐式对象。themeDisplay
使用以下方法获取类型设置字符串:
String typeSettings = themeDisplay.getLayout().getTypeSettings();
Run Code Online (Sandbox Code Playgroud)类型设置将具有如下值:
layout-template-id=foobar_2column
sitemap-include=1
column-1=foo_WAR_barportlet,abc_WAR_barportlet,56_INSTANCE_K4Vv,
column-2=baz_WAR_xyzportlet,
sitemap-changefreq=daily
Run Code Online (Sandbox Code Playgroud)因此,如果您有一个不可实例化的 portlet,其 IDfoo位于 WAR 文件内bar,则该 portlet 在布局上的唯一 ID 将为
foo_WAR_barportlet。
一旦您知道了您希望出现的 portlet ID,就只需进行字符串包含检查即可。
<% if(!typeSettings.contains("foo_WAR_barportlet")) { %>
<h3 style="color: red">Alert! Portlet foo_WAR_barportlet not installed.</h3>
<% } %>
Run Code Online (Sandbox Code Playgroud)您甚至可以在主题内执行上述步骤,但您必须在 Velocity 而不是 Java 中执行。希望有帮助。
编辑
您可以将这一行添加到您的portal_normal.vm
#if(!$layout.getTypeSettings().contains("foo_WAR_barportlet"))
<h3 style="color: red">Alert! Portlet foo_WAR_barportlet not installed.</h3>
#end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |