在单个请求中呈现多个视图

在单个请求中呈现多个视图,第1张

在单个请求中呈现多个视图

更新: 有一些方法可以解决您的问题。我会尝试这种方法,但也许有更清洁的方法。

@Componentpublic class JsonMultipleViewFactory {    @Autowired private List<ViewResolver> viewResolverList;    public View getView(List<ModelAndView> mavList) {        for (ModelAndView mav : mavList) { if (mav.getView()==null) {     mav.setView(resolve(mav.getViewName())); }        }        return new JsonMultipleView(mavList);    }    private View resolve(String viewName) {        for (ViewResolver vr : viewResolverList) { View view = vr.resolve(viewName, LocaleContextHolder.getLocale()); if (view!=null) {     return view; }        }        return null;    }}public class JsonMultipleView implements View {    private final List<ModelAndView> mavList;    public JsonMultipleView(List<ModelAndView> mavList) {        this.mavList = mavList;    }    public String getContentType() {         return "application/json";     }    public void render(Map<String,?> model, HttpServletRequest request, HttpServletResponse response) {        Json json = new Json(); // You can use several Json libraries here        for (ModelAndView mav : mavList) { MockHttpServletResponse mockResponse = new MockHttpServletResponse(); mav.getView().render(mav.getModel(), request, mockResponse); json.add(mav.getViewName(), mockResponse.getContentAsString());        }        json.write(response.getOutputStream());        response.getOutputStream().close();    }}

可以这样使用:

@Autowired private JsonMultipleViewFactory jsonMultipleViewFactory;@RequestMapping(value = "my-request")public View myRequest() {    ...    List<ModelAndView> mavList = new ArrayList<ModelAndView>();    mavList.add(modelAndView1);    mavList.add(modelAndView2);    return jsonMultipleViewFactory.getView(mavList);}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5441989.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-11
下一篇2022-12-11

发表评论

登录后才能评论

评论列表(0条)

    保存