gpt4 book ai didi

java - 当 portlet 不存在时 Liferay 提醒用户

转载 作者:搜寻专家 更新时间:2023-10-31 20:05:25 26 4
gpt4 key购买 nike

假设 portlet X 被部署到 Liferay 并且映射了一个友好的 URL。假设用户通过映射的 URL 进入 Liferay 门户,但门户中不存在 portlet - 它已部署但未添加到页面。

我的问题是,当用户使用映射的 URL 时,没有任何反应 - 门户没有提供视觉反馈,目标 portlet 不存在。

我该如何改变它?我需要向用户发出某种警报/通知...

-- 编辑--

我不需要使用第二个 portlet 来检查另一个 portlet 是否存在。

最诚挚的问候,

最佳答案

据我所知,没有什么自然的方法可以做到这一点。 Portlet 不需要总是安装在页面上。所以,这种行为是很正常的。

我能想到的一个相当hacky的解决方案:

  1. 获取 ThemeDisplay JSP 中的对象使用 <liferay-theme:defineObjects />这将公开隐式对象 themeDisplay在 JSP 范围内。

  2. 使用以下方法获取类型设置字符串:

    String typeSettings = themeDisplay.getLayout().getTypeSettings();
  3. 类型设置的值如下:

    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
  4. 因此,如果您有一个 ID 为 foo 的不可实例化的 portlet内战文件 bar , portlet 在布局上的唯一 ID 将是 foo_WAR_barportlet .

  5. 一旦您知道您希望出现的 portlet ID,这只是字符串包含检查的问题。

    <% if(!typeSettings.contains("foo_WAR_barportlet")) { %>
    <h3 style="color: red">Alert! Portlet foo_WAR_barportlet not installed.</h3>
    <% } %>

您甚至可以在主题内执行上述步骤,但您必须在 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

关于java - 当 portlet 不存在时 Liferay 提醒用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9190792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com