doView覆盖的super.doView(...)和include(...)有什么区别?

时间:2012-08-10 06:36:10

标签: liferay portlet

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

super.doView(renderRequest, renderResponse);

或者这个:

include(viewJSP, renderRequest, renderResponse);

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

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

谢谢!

2 个答案:

答案 0 :(得分:8)

所以你必须扩展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);
}

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

答案 1 :(得分:1)

include允许您指定要使用的其他JSP而不是默认视图。因此,如果您没有使用自定义视图页面,那么它们将起作用。