仿造spring-json view写的view

本文介绍了一种模仿Spring框架的JsonView实现的HTMLView组件,该组件简化了Controller层直接操作response的过程,并实现了HTML字符串的输出。通过这种方式,不仅统一了代码风格,还便于后期维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仿造spring-json view写的view

前几天了解了下spring-json,仿造它写了个简单的将string(也就是常常JAVA代码里面拼装的html)放到response那边的view。
仿造
org.springframework.web.servlet.view.json.JsonView
写了一个
cn.sccl.base.web.view.HtmlView
他们都要继承自AbstractView
实现里面的
protected void renderMergedOutputModel(Map model,
HttpServletRequest request, HttpServletResponse response)
throws Exception
方法。

具体代码如下:
package cn.sccl.base.web.view;
import java.io.PrintWriter;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.view.AbstractView;
public class HtmlView extends AbstractView {
private static Log log = LogFactory.getLog(HtmlView.class);
@SuppressWarnings("unchecked")
protected void renderMergedOutputModel(Map model,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// log.debug(" Map model : " + model.toString());
PrintWriter out = null;
out = response.getWriter();
out.write(getHtmlFromMap(model));
out.flush();
out.close();
}
@SuppressWarnings("unchecked")
private String getHtmlFromMap(Map model) {
String restr = "";
if (model != null && !model.isEmpty()) {
// 取第一个元素
Object obj = model.get(model.keySet().iterator().next());
if (obj instanceof String) {
restr = (String) obj;
}
}
log.debug(" html : " + restr);
return restr;
}
}

在views.xml中增加了如下一行配置
<bean name="htmlView" class="cn.sccl.base.web.view.HtmlView"></bean>
在我们的Controller中,只需要这样写
ModelAndView mav = new ModelAndView("htmlView");
mav.addObject(html);
return mav;
就可以等同于
response.getOutputStream().write(html.getBytes());
或者
PrintWriter out = null;
out = response.getWriter();
out.write(html);
out.flush();
out.close();

其实这样代码并没有节省,反而麻烦些,不过统一了Controller的返回,都是操作ModelAndView了,而不自己去操作response,同时将json或者html的一些代码统一放在了一起,方便以后更改,代码没有散到各个Controller里面。
另外这个扩展完全是为了学习下这种view的方式。以后比如要显示到Excel,pdf,或者向response写二进制文件,都可以仿造这样的方式包装一些,达到集中和统一代码的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值