我正在开发一个自定义portlet(编辑:我正在扩展MVCPortlet),并查看几个示例和教程,我发现当覆盖doView(RenderRequest,RenderResponse)方法时,在它的末尾总会有至少这一行:
super.doView(renderRequest, renderResponse);
或者这个:
include(viewJSP, renderRequest, renderResponse);
如果我没有放置其中任何一个,我的portlet不会呈现任何内容,但是其中任何一个都可以解决问题。
我想知道我应该使用哪一个,为什么我需要添加它们以使我的portlet工作。
谢谢!
答案 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而不是默认视图。因此,如果您没有使用自定义视图页面,那么它们将起作用。