脚本视图

Spring框架内置了使用Spring MVC与任何可以在JSR-223 Java脚本引擎上运行的模板库进行集成的功能。我们已经在不同的脚本引擎上测试了以下模板库:spring-doc.cadn.net.cn

脚本库 脚本引擎

ERBspring-doc.cadn.net.cn

JRubyspring-doc.cadn.net.cn

字符串模板spring-doc.cadn.net.cn

Jythonspring-doc.cadn.net.cn

集成任何其他脚本引擎的基本规则是,它必须实现ScriptEngineInvocable接口。

要求

你需要将脚本引擎添加到你的类路径中,具体细节因脚本引擎而异:spring-doc.cadn.net.cn

脚本模板

您可以声明一个ScriptTemplateConfigurer bean来指定要使用的脚本引擎、要加载的脚本文件、用于渲染模板的函数等。以下示例使用了Jython Python引擎:spring-doc.cadn.net.cn

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		registry.scriptTemplate();
	}

	@Bean
	public ScriptTemplateConfigurer configurer() {
		ScriptTemplateConfigurer configurer = new ScriptTemplateConfigurer();
		configurer.setEngineName("jython");
		configurer.setScripts("render.py");
		configurer.setRenderFunction("render");
		return configurer;
	}
}
@Configuration
class WebConfiguration : WebMvcConfigurer {

	override fun configureViewResolvers(registry: ViewResolverRegistry) {
		registry.scriptTemplate()
	}

	@Bean
	fun configurer() = ScriptTemplateConfigurer().apply {
		engineName = "jython"
		setScripts("render.py")
		renderFunction = "render"
	}
}
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:mvc="http://www.springframework.org/schema/mvc"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="
			http://www.springframework.org/schema/beans
			https://www.springframework.org/schema/beans/spring-beans.xsd
			http://www.springframework.org/schema/mvc
			https://www.springframework.org/schema/mvc/spring-mvc.xsd">

	<mvc:view-resolvers>
		<mvc:script-template/>
	</mvc:view-resolvers>

	<mvc:script-template-configurer engine-name="jython" render-function="render">
		<mvc:script location="render.py"/>
	</mvc:script-template-configurer>

</beans>

渲染函数将被调用,并传入以下参数:spring-doc.cadn.net.cn

控制器用于填充模型属性并指定视图名称,如下例所示:spring-doc.cadn.net.cn

@Controller
public class SampleController {

	@GetMapping("/sample")
	public String test(Model model) {
		model.addAttribute("title", "Sample title");
		model.addAttribute("body", "Sample body");
		return "template";
	}
}
@Controller
class SampleController {

	@GetMapping("/sample")
	fun test(model: Model): String {
		model["title"] = "Sample title"
		model["body"] = "Sample body"
		return "template"
	}
}

查看Spring Framework的单元测试、Java资源,以获取更多配置示例。spring-doc.cadn.net.cn