4

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

super.doView(renderRequest, renderResponse);

或这个:

include(viewJSP, renderRequest, renderResponse);

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

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

谢谢!

4

2 回答 2

8

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

super.doView(renderRequest, renderResponse);

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

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

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

包括(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);
}

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

于 2012-08-13T09:37:42.637 回答
1

包含允许您指定要使用的不同 JSP,而不是默认视图。因此,如果您不使用自定义视图页面,则两者都可以。

于 2012-08-10T17:24:50.117 回答