enjoy模板导出文件如何集成springboot

现在有个需求是导出一个文件格式可能是word或者txt等

不去使用poi等中间件

想用

response.setCharacterEncoding("UTF-8");
response.setHeader("Content-disposition", "attachment; " + encodeFileName(request, downloadFileName));
response.setContentType("application/octet-stream;charset=UTF-8");

类似于这种方式去output stream

但是有个问题是,springboot中路由不是jfinal的render,如何把我的一些参数到给我response返回的html模板里?

我看到分享中有人在jfinal的项目中是这么去用的

protected void normalRender(){
        Map<Object, Object> data = new HashMap<Object, Object>();
        for (Enumeration<String> attrs=request.getAttributeNames(); attrs.hasMoreElements();) {
            String attrName = attrs.nextElement();
            data.put(attrName, request.getAttribute(attrName));
        }
        
        try {
            getEngine().getTemplate(view).render(data, response.getOutputStream());
        } catch (Exception e) {
            throw new RenderException(e);
        }
    }

那么我在springboot中怎么去做

getEngine().getTemplate(view).render(data, response.getOutputStream());

这么一件事情?

评论区

JFinal

2018-05-13 16:32

在 spring 中想办法 new 一个 Engine 对象自己用,或者将 spring 与 enjoy 整合起来,整合方法见这里:
http://www.jfinal.com/doc/6-10

整合以后可以通过JFinalViewResolver.me().getEngine() 来获取engine 对象去使用

剩下的事情就是在 spring boot 中获取 HttpServletResponse response 对象了,我记得是在 action 中直接放处这个参数即可:
public void index(HttpServletResponse response)

有了 Engine 对象与 HttpServletResponse 对象以后,剩下的事情与你在 jfinal 中的用法就完全一样了

yjjdick1990

2018-05-13 16:52

@JFinal 波总我发现不用那么麻烦,JFinalViewResolver我之前已经集成好了的,我直接response中加了header然后想平时那样去retrun modelAndView 就可以实现了,而且enjoy的模板能正常解析

JFinal

2018-05-13 16:59

yjjdick1990

2018-05-14 22:48

@JFinal 恩用JFinalViewResolver直接在springboot的controller中把header加上去就能实现,都不用改什么东西的

热门反馈

扫码入社