此版本仍在开发中,尚未被视为稳定版。如需最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

脚本视图

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 接口。

要求

您需要将脚本引擎放在类路径(classpath)中,具体细节因脚本引擎而异: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>

render 函数将使用以下参数进行调用: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