如何在 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?
我认为我需要的:
- 通过重定向打开 portlet 以编辑表单的方法 (edit.jsp)
- 使用参数 (itemId) 重定向到其他 liferay 页面的方法,该参数将在 details.jsp 而非标准 view.jsp.
上打开该页面
====
编辑:
现在我有这样的链接:
详情:
<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,但我确信这个问题有更好、更生动的解决方案。
你的问题有点高级,但是解决方法有以下技巧:
- 您可以为您的 portlet 定义一个 friendly URL,它将直接在您的 portlet 中传输参数。
在您的 portlet 中,您可以根据需要对参数作出反应并显示 jsp。
如果您从 2. 定义了友好的 url,您可以轻松地在 link 中使用它:
如果您能提供一些示例代码,我们可以进行更详细的介绍。
No hard-n-fast rule to create separate portlets for view / add /
update actions. That totally depends on you.
您可以在多个页面上使用单个(相同)portlet 来实现此目的,默认为列表视图。只需在 rowURL
和 addURL
操作的列表视图的锚点上设置 target="_blank"
即可在新选项卡上打开 link。其余部分将由 portlet 生命周期处理,以根据为 URL.
设置的 portlet:param
呈现特定视图
另一种方法是直接重定向到使用 itemId=abc
和 action=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 中配置的更多信息,请参阅:
我在 liferay 中有一个 portlet,它显示项目列表并允许 add/edit(服务构建器完成的 add/save/list 个项目)。
现在我需要单独的 liferay 页面,只添加新功能 - 这可以用一个 portlet 完成还是应该将它复制到单独的 portlet?
我认为我需要的:
- 通过重定向打开 portlet 以编辑表单的方法 (edit.jsp)
- 使用参数 (itemId) 重定向到其他 liferay 页面的方法,该参数将在 details.jsp 而非标准 view.jsp. 上打开该页面
==== 编辑:
现在我有这样的链接:
详情:
<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,但我确信这个问题有更好、更生动的解决方案。
你的问题有点高级,但是解决方法有以下技巧:
- 您可以为您的 portlet 定义一个 friendly URL,它将直接在您的 portlet 中传输参数。
在您的 portlet 中,您可以根据需要对参数作出反应并显示 jsp。
如果您从 2. 定义了友好的 url,您可以轻松地在 link 中使用它:
如果您能提供一些示例代码,我们可以进行更详细的介绍。
No hard-n-fast rule to create separate portlets for view / add / update actions. That totally depends on you.
您可以在多个页面上使用单个(相同)portlet 来实现此目的,默认为列表视图。只需在 rowURL
和 addURL
操作的列表视图的锚点上设置 target="_blank"
即可在新选项卡上打开 link。其余部分将由 portlet 生命周期处理,以根据为 URL.
portlet:param
呈现特定视图
另一种方法是直接重定向到使用 itemId=abc
和 action=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 中配置的更多信息,请参阅: