我希望用renderjsp后,把视图当作字符串用

我希望用renderjsp后,把视图当作字符串用。然后把字符串以aa.xls的格式输出。以实现一些格式比较复杂的XLS文件下载。

现卡在如何获取renderjsp后的字符串。

谢谢

评论区

杜福忠

2018-05-21 09:16

还用啥JSP... 用Enjoy吧...JFinal使用技巧-Enjoy导出XLS

JFinal

2018-05-21 09:19

Jsp 文件 render 后的内容不太好获取,建议使用 renderToString(...) 这个方法,可以直接获取到内容:
String result = renderToString(...);

只不过这个方法使用的是 jfinal 的 enjoy 引擎,建议试用一下这个方法,enjoy 文档第一部分告知了一种 3 秒钟内掌握 90% 用法的方法:
http://www.jfinal.com/doc/6-1

注意看下文档中红色字体的说明

timzh

2018-05-21 09:32

谢谢各位!主要是原来是一个JSP模板来的,后来客户突然说要把这个做成可以下载EXCELL表格,于是想到最快的方案就是把原来的JSP模板直接另存为了

JFinal

2018-05-21 09:36

@timzh 其它模板引擎都好处理,只需要将输出改变一下即可,唯独 jsp 不好处理,因为 jsp 的使用是下面这样的:
request.getRequestDispatcher(view).forward(request, response);

解决这个需求,需要替换引擎的输出,例如 OuputStream Writer,而 jsp 的这两个东东恰好在 jsp 被编译成的 class 文件中

这个 class 文件是被 jsp 被编译而成,没有 java 源代码,所以只能去修改 jsp 编译器的代码

timzh

2018-05-21 09:43

好的,在看Enjoy。

JFinal

2018-05-21 09:45

还想到一个办法,大致如下:
1:创建 public class MyRequest extends HttpServletRequest

2:MyRequest 通过构造方法,将原 request 传入
public MyRequest(HttpServletRequest request) {
this.request = request;
}

3:在 MyRequest 中覆盖掉父类的 getWriter()、getOutputStream(),将这两个方法的返回值替换成自己希望输出的目的地,例如:
public Writer getWriter() {
// 这个 MyWriter 是你定制的写入到的一个目的地,用于接收生成的结果
new MyWriter(super.getWriter());
}

4:除了 getWriter()、getOutputStream() 以外,其它方法者转调 request 对象中的方法,例如:
public String getParameter(String name) {
return this.request.getParameter(name);
}

通过上面的方式,相当于通过包装 HttpServletRequest request 的方式,将输出目的地重定向到了你自己想要的地方

热门反馈

扫码入社