获取Spring 3.1 MVC视图的渲染输出
我需要将Spring 3.1 MVC视图的渲染输出转换成字符串(用于发送到PDF转换器或MIME电子邮件等),我一直在使用以下代码: 这被注入控制器获取Spring 3.1 MVC视图的渲染输出,spring,spring-mvc,Spring,Spring Mvc,我需要将Spring 3.1 MVC视图的渲染输出转换成字符串(用于发送到PDF转换器或MIME电子邮件等),我一直在使用以下代码: 这被注入控制器 @Autowired TilesViewResolver viewResolver; 以及以下帮助器方法: private String renderViewToString(ModelMap map, HttpServletRequest request, HttpServletResponse httpServletR
@Autowired
TilesViewResolver viewResolver;
以及以下帮助器方法:
private String renderViewToString(ModelMap map, HttpServletRequest request, HttpServletResponse httpServletResponse, final String viewName) {
final StringWriter html = new StringWriter();
View pdfView = new View() {
@Override
public String getContentType() {
return "application/pdf";
}
@Override
public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(response) {
@Override
public PrintWriter getWriter() throws IOException {
return new PrintWriter(html);
}
};
View realView = viewResolver.resolveViewName(viewName, Locale.US);
Map<String, Object> newModel = new HashMap<String, Object>(model);
newModel.put("pdfMode", Boolean.TRUE);
realView.render(newModel, request, wrapper);
}
};
try {
pdfView.render(map, request, httpServletResponse);
} catch (Exception e) {
// Ignored for now
}
return html.toString();
}
私有字符串renderViewToString(ModelMap映射、HttpServletRequest请求、HttpServletResponse、HttpServletResponse、最终字符串视图名){
final StringWriter html=新StringWriter();
视图pdfView=新视图(){
@凌驾
公共字符串getContentType(){
返回“application/pdf”;
}
@凌驾
公共void呈现(映射模型、HttpServletRequest请求、HttpServletResponse响应)引发异常{
HttpServletResponseWrapper=新的HttpServletResponseWrapper(响应){
@凌驾
公共PrintWriter getWriter()引发IOException{
返回新的PrintWriter(html);
}
};
View realView=viewResolver.resolveViewName(viewName,Locale.US);
Map newModel=新HashMap(model);
newModel.put(“pdfMode”,Boolean.TRUE);
render(newModel、request、wrapper);
}
};
试一试{
render(映射、请求、httpServletResponse);
}捕获(例外e){
//暂时忽略
}
返回html.toString();
}
我的代码基于的贷方和贷方
我的问题是有没有更好的方法?我的代码运行良好,但现在我已经接近生产,我认为如果有改进的空间,我想尝试一下
多亏了所有的您将视图和控制器组合在一起,打破了MVC模式。更好的解决方案是定义视图并将其注册到ContentNegotiatingViewResolver。根据请求的内容类型,解析器会将请求委托给您的视图 e、 g
您将此作为一个问题提出。。。我把它看作是一个答案。。。正是我想要的。。。对我来说绝对有用,因为我只需要html将其作为json响应的一部分发送。。。竖起大拇指的人。。。你太棒了!
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="0" />
<property name="mediaTypes">
<map>
<entry key="pdf" value="application/pdf" />
</map>
</property>
<property name="defaultViews">
<list>
<bean class="com.abc.MyCustomView">
<property name="contentType" value="pdf" />
</bean>
</list>
</property>
</bean>