我在这里所做的如下。
我在屏幕上有一个命令按钮,我已经附加了一个 actionListener。单击按钮时,将调用操作侦听器并执行以下行
PortletResponse portletResponse = (PortletResponse)externalContext.getResponse(); HttpServletResponse httpResponse = PortalUtil.getHttpServletResponse(portletResponse);
generateReport(httpResponse.getOutputStream());
在某些业务逻辑执行以下几行之后生成报告。
context.put(...); ……
BufferedWriter writer = writer = new BufferedWriter(new OutputStreamWriter(fos));//其中fos是输出流
if (t != null){// t 是 Velocity 模板
t.merge(context, writer);//context is VelocityContext
}
writer.flush(); writer.close();
在 generateReport 方法之后没有其他调用。请求在 generateReport 返回后完成,我希望它应该向我显示对话框,但事实并非如此。
希望你能明白这一点。
编辑:感谢您的回复奥拉夫
1)首先,我非常清楚portlet 没有任何按钮或动作监听器的概念。我肯定会使用一个名为 Icefaces 的框架或任何一个框架。
2)生成文档只是我的想法,因为最初我不知道portlet 只显示标记而没有其他内容的事实。我的错 :)。
3)好吧,我想我已经提到我必须使用该方法,甚至我根本无法更改它。因此,无论代码是什么,我都必须实现功能,在这种情况下,我给出的代码示例就足够了。
4)我对portlet 进行了一些研究,发现在JSR 268 中提供了“资源服务”功能,但在JSR 168 中没有这样的支持。但重要的是,我找到的解决方案都是依赖于 JSP 的,并且 m 使用 xhtml 格式进行 UI 渲染。
5)我正在做的是我有一个显示交易的 portlet,并且我需要在 portlet 上提供一个“打印交易”按钮,该按钮将实际打印该页面上显示的内容。为此,我提供了一个名为“generateReport”的方法,该方法目前在旧的 JSP 环境中使用,即从 JSP 中调用了该方法。
6)我知道代码似乎从根本上是错误的,但是实现一个单独的 servlet 是我将对代码做的另一个错误。我已经为此进行了研究,并且 85 % 接近解决方案。M 考虑资源服务解决方案,我不认为单独的 servlet 是非常优雅的解决方案。
我将非常感谢您的任何帮助,我希望您对我在做什么以及应该做什么有所了解。
谢谢并恭祝安康,