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

sto*_*ark 4 portlet liferay

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

super.doView(renderRequest, renderResponse);
Run Code Online (Sandbox Code Playgroud)

或这个:

include(viewJSP, renderRequest, renderResponse);
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

Pra*_*h K 8

所以你必须扩展MVCPortlet课程.这两个调用都用于在处理完成后包含 JSP doView.如果您查看此类的源代码,那么您将了解流程是什么,下面是我的解释:

super.doView(renderRequest,renderResponse);

这包括默认的JSP view.jsp,即您可能(或不)已经配置portlet.xml如下:

<init-param>
    <name>view-template</name>
    <value>/html/view.jsp</value>
</init-param>
Run Code Online (Sandbox Code Playgroud)

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

include(viewJSP,renderRequest,renderResponse);

此方法包括您为参数指定的任何JSP路径viewJSP.因此,通过此调用,您可以为不同的条件指定包含不同的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);
}
Run Code Online (Sandbox Code Playgroud)

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