如何在 Liferay 中添加带有重定向到特殊 jsp(编辑)的 portlet

How to add portlet with redirect to special jsp (edit) in Liferay

我在 liferay 中有一个 portlet,它显示项目列表并允许 add/edit(服务构建器完成的 add/save/list 个项目)。

现在我需要单独的 liferay 页面,只添加新功能 - 这可以用一个 portlet 完成还是应该将它复制到单独的 portlet?

我认为我需要的:

  1. 通过重定向打开 portlet 以编辑表单的方法 (edit.jsp)
  2. 使用参数 (itemId) 重定向到其他 liferay 页面的方法,该参数将在 details.jsp 而非标准 view.jsp.
  3. 上打开该页面

==== 编辑:

现在我有这样的链接:

详情:

<liferay-portlet:renderURL varImpl="rowURL">
    <portlet:param name="backURL" value="<%= portletURLString %>" />
    <portlet:param name="mvcPath" value="/html/details.jsp" />
    <portlet:param name="itemId" value="<%= String.valueOf(item.getId()) %>" />
</liferay-portlet:renderURL>

添加:

<liferay-portlet:renderURL varImpl="addURL">
    <portlet:param name="mvcPath" value="/html/edit.jsp" />
</liferay-portlet:renderURL>

但它们只能在相同的 portlet/page 中工作。

在 liferay 中我有两个 public 页面:"search/details" 和 "add"。

在 "add" 页面上,此 portlet 应呈现 edit.jsp(第二个 url)。 然后在执行操作后,我应该将授权用户重定向到具有新创建项目 ID 的 "search/details" 页面并显示其详细信息。

我可以创建两个 portlet,但我确信这个问题有更好、更生动的解决方案。

你的问题有点高级,但是解决方法有以下技巧:

  1. 您可以为您的 portlet 定义一个 friendly URL,它将直接在您的 portlet 中传输参数。

在您的 portlet 中,您可以根据需要对参数作出反应并显示 jsp。

  1. 如果您从 2. 定义了友好的 url,您可以轻松地在 link 中使用它:

    编辑

如果您能提供一些示例代码,我们可以进行更详细的介绍。

No hard-n-fast rule to create separate portlets for view / add / update actions. That totally depends on you.

您可以在多个页面上使用单个(相同)portlet 来实现此目的,默认为列表视图。只需在 rowURLaddURL 操作的列表视图的锚点上设置 target="_blank" 即可在新选项卡上打开 link。其余部分将由 portlet 生命周期处理,以根据为 URL.

设置的 portlet:param 呈现特定视图

另一种方法是直接重定向到使用 itemId=abcaction=add/update 作为查询字符串的页面。并在您的 portlet 的 doView 中从 request 获取该参数,并根据这些参数过滤包含 jsp.

如果您的站点有静态布局并且您知道将放置哪个 portlet,您可以使用 liferay-renderurl 标记的 plid(页面布局 ID)参数。这使您不仅可以处理 portlet,还可以处理页面。 plid 通常是从一些配置中加载的。

另一个重用现有代码的技巧是重用实际表单和操作 类 并仅创建新的 portlet 定义。这需要您使用 Liferay MVC + 动作命令模式。

您可以使用 portlet 首选项/自定义配置来设置默认视图。您的 portlet P 可以具有 portlet A 的 "type" 的配置参数(在您的情况下,您有两种类型,"view" 和 "detail")。基于这个参数,你可以相应地处理渲染/动作逻辑。

这样,有了两个布局,L1 和 L2,您可以将 P 的实例放在 L1 上并将其类型设置为 "view"。然后,您可以将 P 的另一个实例放在 L2 上。

在 P 的组件(例如渲染命令)中,您可以检查类型(视图或细节),并且您可以根据您的用例(jsp 您想要的来控制渲染/动作逻辑使用等)

有关 liferay 7 中配置的更多信息,请参阅: