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

时间:2018-01-29 16:09:13

标签: liferay portlet liferay-7

我在liferay中有一个portlet,它显示了项目列表并允许添加/编辑(添加/保存/服务构建器完成的项目列表)。

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

我认为我需要:

  1. 打开portlet的方法,重定向到编辑表单(edit.jsp)
  2. 使用param(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中我有两个公共页面:“搜索/详细信息”和“添加”。

    在“添加”页面上,此portlet应呈现edit.jsp(第二个URL)。 然后在执行操作后,我应该将授权用户重定向到“搜索/详细信息”页面,其中包含新创建项目的ID并显示其详细信息。

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

4 个答案:

答案 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)

您的问题有点高,但解决方案是以下技术:

  1. 您可以为portlet定义friendly URL,它将直接在您的portlet中传输参数。
  2. 在你的portlet中,无论你想要什么样的jsp,你都可以对显示器做出反应。

    1. 如果您从2开始定义友好网址,则可以轻松地在链接中使用它:

      &lt; a href =&#34; / my-form-page / - / my-param1 / my-param2&#34;&gt;编辑&lt; / a&gt;

    2. 如果您可以提供一些示例代码,我们可以更详细地介绍。

答案 3 :(得分:0)

  

没有硬性快速规则为view / add /创建单独的portlet   更新动作。这完全取决于你。

您可以在多个页面上使用单个(相同)portlet实现此目的,默认为列表视图。只需在target="_blank"rowURL操作的列表视图的锚点上设置addURL即可在新标签页上打开该链接。其余的将由portlet生命周期处理,以根据为URL设置的portlet:param呈现特定视图。

另一种方法是使用itemId=abcaction=add/update作为queryString进行页面的简单重定向。并在您的portlet的doView中从request获取该参数,并根据这些参数,过滤包含jsp。