环境:
在portlet编程中,portlet与相应的jsp页面是一对一的关系。也就是说,一个页面对应于一个portlet类,可是如果我实现页面与portlet类的多次交互功能,并且每次交互产生一个新的窗口(新的jsp页面),并要求显示不同条件所对应的不同的jsp页面,似乎很难实现。而且,在portlet.xml配置文件中,部分代码如下:
<init-param>
<name>ViewPage</name>
<value>/WEB-INF/view/report/reportView.jsp</value>
</init-param>
只能初始化一对键值参数。 这个似乎有点难解决!!
需要解决的问题:
要实现以上需要解决portelt与jsp页面的对应关系,即jsp产生事件后,需要将事件传递给portlet类处理。这其中,需要解决url的问题(url是jetspeed自动生成的)。可以通过以下代码:提前获知url
PortletURL actionURL = renderResponse.createActionURL();
actionURL.toString();
输出html的内容控制:
问题已经解决了,原来涉及到portlet页面跳转相应的代码与相关输出内容的代码的位置决定的。
(更深入一些,所有的jsp页面的调用,全部是调用的jsp所对应的class文件,通过println输出的html代码。除了在后台调用的是指定的某个jsp页面,浏览器显示的内容并不一定是某个指定的jsp中的内容,有可能是两个或多个的组合。在后台,一次性输出什么内容,前台就一次性显示什么内容,并没有严格意义上的独立的jsp/html页面)。
在doView()中:有这样的一段代码,如下
//跳转到指定页面并输出jsp页面内的内容
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/WEB-INF/view/report/reportProxy.jsp");
// 同步将request、response传到下级视图
rd.include(renderRequest, renderResponse);
//输出内容到浏览器
reportMng.html(nodeIdx, date, department, printWriter, actionURL);
配置文件中的配置为:默认情况下的设置。
(代码顺序决定输出顺序)