【问题标题】:What is the difference between super.doView(...) and include(...) on doView override?doView 覆盖上的 super.doView(...) 和 include(...) 有什么区别?
【发布时间】:2012-08-10 06:36:09
【问题描述】:

我正在开发一个自定义 portlet(编辑:我正在扩展 MVCPortlet),并查看了几个示例和教程,我发现当 doView(RenderRequest, RenderResponse) 方法被覆盖时,在它的末尾总是有至少这一行:

super.doView(renderRequest, renderResponse);

或者这个:

include(viewJSP, renderRequest, renderResponse);

如果我不放置其中任何一个,我的 portlet 将不会呈现任何内容,但其中任何一个都可以解决问题。

我想知道我应该使用哪一个,以及为什么我需要添加它们才能让我的 portlet 工作。

谢谢!

【问题讨论】:

    标签: liferay portlet


    【解决方案1】:

    所以你必须扩展MVCPortlet 类。这两个调用都用于在doView 处理完成后包含 JSP。如果你看一下这个类的源代码你就会明白流程是什么,下面是我的解释:

    super.doView(renderRequest, renderResponse);

    这包括默认的 JSP,即 view.jsp,您可能(或没有)在 portlet.xml 中配置了类似这样的内容:

    <init-param>
        <name>view-template</name>
        <value>/html/view.jsp</value>
    </init-param>
    

    这个超类方法什么都不做,只是在最后调用include(viewJSP, renderRequest, renderResponse);方法。

    include(viewJSP, renderRequest, renderResponse);

    此方法包括您为参数viewJSP 指定的任何JSP 路径。因此,通过此调用,您可以为不同的条件指定包括不同的 JSP,如下所示:

    if (isThisTrue) {
        include("/html/myCustomPortlet/view.jsp", renderRequest, renderResponse);
    } else if (isThisTrueThen) {
        include("/html/myCustomPortlet/first/another_view.jsp", renderRequest, renderResponse);
    } else {
        super.doView(renderRequest, renderResponse);
    }
    

    因此,根据您的要求,您可以使用两者中的任何一种或两者的混合,如上所示。希望这会有所帮助。

    【讨论】:

    • 你说得对,我正在扩展 MVCPortlet。恐怕我忘了澄清这一点。我已按照您的建议,并下载了源代码。正如您所说,我看到这两个选项都做同样的事情!因为 super.doView(...) 使用 'viewTemplate' 调用 include(...) 本身(这是默认的 view.jsp)。谢谢!
    【解决方案2】:

    包含允许您指定要使用的不同 JSP 来代替默认视图。因此,如果您不使用自定义视图页面,也可以使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      相关资源
      最近更新 更多