我在liferay中有一个portlet,它显示了项目列表并允许添加/编辑(添加/保存/服务构建器完成的项目列表)。
现在我需要单独的liferay页面,只添加新功能 - 可以用一个portlet完成,还是应该将它复制到单独的portlet?
我认为我需要:
==== 编辑:
现在我有这样的链接:
细节:
<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中我有两个公共页面:“搜索/详细信息”和“添加”。
在“添加”页面上,此portlet应呈现edit.jsp(第二个URL)。 然后在执行操作后,我应该将授权用户重定向到“搜索/详细信息”页面,其中包含新创建项目的ID并显示其详细信息。
我可以创建两个portlet,但我确信这个问题有更好,更生命的解决方案。
答案 0 :(得分:1)
如果您的网站具有静态布局,并且您知道将放置哪个portlet,您可以使用liferay-renderurl标记的plid(页面布局ID)参数。这使您不仅可以处理portlet,还可以处理页面。 plid通常是从某种配置加载的。
如何重用现有代码的另一个技巧是重用实际的表单和操作类,并仅创建新的portlet定义。这要求您使用Liferay MVC +动作命令模式。
答案 1 :(得分:1)
您可以使用portlet首选项/自定义配置设置默认视图。您的portlet P可以具有portlet A的“类型”的配置参数(在您的情况下,您有两种类型,“view”和“detail”)。基于此参数,您可以相应地处理渲染/操作逻辑。
这样,有了两个布局,L1和L2,你可以在L1上放置一个P实例并将其类型设置为“view”。然后,您可以将另一个P实例放在L2上。
在P的组件(例如渲染命令)中,您可以检查类型(视图或详细信息),并根据您的用例(您要使用的jsp等)在渲染/操作逻辑上控制。 / p>
有关liferay 7中配置的更多信息,请参阅:
答案 2 :(得分:0)
您的问题有点高,但解决方案是以下技术:
在你的portlet中,无论你想要什么样的jsp,你都可以对显示器做出反应。
如果您从2开始定义友好网址,则可以轻松地在链接中使用它:
&lt; a href =&#34; / my-form-page / - / my-param1 / my-param2&#34;&gt;编辑&lt; / a&gt;
如果您可以提供一些示例代码,我们可以更详细地介绍。
答案 3 :(得分:0)
没有硬性快速规则为view / add /创建单独的portlet 更新动作。这完全取决于你。
您可以在多个页面上使用单个(相同)portlet实现此目的,默认为列表视图。只需在target="_blank"
和rowURL
操作的列表视图的锚点上设置addURL
即可在新标签页上打开该链接。其余的将由portlet生命周期处理,以根据为URL设置的portlet:param
呈现特定视图。
另一种方法是使用itemId=abc
和action=add/update
作为queryString进行页面的简单重定向。并在您的portlet的doView
中从request
获取该参数,并根据这些参数,过滤包含jsp。