Spring 视图技术 xslt以及文档视图

Spring的一个优秀之处在于,把view层技术与MVC框架的其他部分分离开来。 例如,选择使用Velocity或者XSLT来代替已有的JSP方式只需要修改配置就可以实现。


一:xslt视图

下面利用xslt视图技术实现word形式的视图

1 首先在ServletConfig.java中注册xslt的视图解析器。

@Bean 
	public ViewResolver viewResolver(){		//配置jsp视图解析器
		XsltViewResolver viewResolver = new XsltViewResolver();
		viewResolver.setPrefix("/WEB-INF/xsl/");
		viewResolver.setSuffix(".xslt");
		return viewResolver;
	}
当然你也可以使用xml文件来配置
<bean class="org.springframework.web.servlet.view.xslt.XsltViewResolver">
		<property name="prefix" value="/WEB-INF/xsl/" />
		<property name="suffix" value=".xslt" />
	</bean>
新建一个 “home.xslt”文件,用来渲染显示视图内容 注意该文件所在目录为"WEB-INF/xsl/"其是1中的Prefix配置

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

	<xsl:output method="html" omit-xml-declaration="yes" />

	<xsl:template match="/">
		<html>
			<head>
				<title>Hello!</title>
			</head>
			<body>
				<h1>My First Words</h1>
				<ul>
					<xsl:apply-templates />
				</ul>
			</body>
		</html>
	</xsl:template>

	<xsl:template match="word">
		<li>
			<xsl:value-of select="." />
		</li>
	</xsl:template>

</xsl:stylesheet>
3 新建一个XsltController 控制器 注意返回的视图文件名称 “home”表示返回的视图文件是在/WEB-INF/xsl/文件夹下的 home.xslt文件,其在2中创建

@RequestMapping("/")
    public String home(Model model) throws Exception {

        Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
        Element root = document.createElement("wordList");

        List<String> words = Arrays.asList("Hello", "Spring", "Framework");
        for (String word : words) {
            Element wordNode = document.createElement("word");
            Text textNode = document.createTextNode(word);
            wordNode.appendChild(textNode);
            root.appendChild(wordNode);
        }

        model.addAttribute("wordList", root);
        return "home";
    }
按照上面你的步骤完成后,访问controller即可获得xslt视图。


二:文档视图

对看模型数据输出的用户来说,返回一个HTML页面并不总是最好的方法。 Spring简化了根据模型数据动态输出PDF文档或Excel电子表格的工作。 这些文档即最终视图,它们将以适当的内容类型用流的形式从服务器输出到客服端。

1 同一中的第一步:在ServletConfig.java中注册xslt的视图解析器。

2:新建一个controller添加一个映射

@RequestMapping("/excel")
    public ModelAndView excel(Model model) throws Exception {
    	model.addAttribute("wordList", "");
    	return  new ModelAndView(new HomePage(), (Map<String, ?>) model);
    }
3 新建一个继承 AbstractExcelView类的视图类

public class HomePage extends AbstractExcelView {

	@Override
	protected void buildExcelDocument(Map model, HSSFWorkbook workbook, HttpServletRequest req,
            HttpServletResponse response) throws Exception {
		
		String fileName = "用户列表excel.xls";  
        response.setCharacterEncoding("UTF-8");  
        response.setContentType("application/ms-excel");  
        response.setHeader("Content-Disposition", "inline; filename="+new String(fileName.getBytes(),"iso8859-1"));  
        OutputStream outputStream = response.getOutputStream();
        
        // 产生Excel表头
        HSSFSheet sheet = workbook.createSheet("基本信息");
        HSSFRow header = sheet.createRow(0);
        // 产生标题列
        header.createCell(0).setCellValue("ID");
        header.createCell(1).setCellValue("名字");
        header.createCell(2).setCellValue("邮箱");
        header.createCell(3).setCellValue("密码");
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("mm/dd/yyyy"));
        int rowNumber = 1;
        for (int i=0;i<10;i++) {
            HSSFRow row = sheet.createRow(rowNumber++);
            // 产生标题列
            row.createCell(0).setCellValue("1111"+rowNumber);
            row.createCell(1).setCellValue("2222"+rowNumber);
            row.createCell(2).setCellValue("3333"+rowNumber);
            row.createCell(3).setCellValue("4444"+rowNumber);
        }
        workbook.write(outputStream);
        outputStream.flush();
        outputStream.close();
	}
}


访问controller中的映射,系统会自动下载excel文件。

当然也可以实现PDF的视图,具体实现请参考spring的参考手册















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值