You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC中ModelAndView传值后页面未正常渲染如何解决

问题根因

HTML中的${resultUrl}、${embedUrl}是模板变量占位符,当前请求没有经过模板引擎解析,后端直接将HTML源文件作为静态资源返回给浏览器。浏览器会将${resultUrl}识别为真实访问路径发起请求,必然出现404或空白页;硬编码URL时路径是真实有效值,所以可以正常访问。

首先确保模板页面不要放在/static、/public、/resources、/META-INF/resources这类Spring默认静态资源目录下,这类目录下的文件会被直接返回,不会执行变量替换逻辑。


方案1:使用Thymeleaf模板引擎(Spring官方推荐)

  1. 引入Thymeleaf依赖,Spring Boot项目直接引入对应starter即可:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  1. Spring Boot默认配置即可使用,将Response.html放到src/main/resources/templates/目录下(Thymeleaf默认视图路径前缀为classpath:/templates/,后缀为.html)。
  2. 修改Controller中视图名配置,去掉后缀:
modelAndView.setViewName("Response");
  1. 修改HTML代码,引入Thymeleaf命名空间,通过th:属性绑定后端传递的变量:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>

</head>

<body>
<iframe th:src="${resultUrl}" width="980" height="560" frameBorder="0" class="giphy-embed" allowFullScreen></iframe>
<p><a th:href="${embedUrl}">text</a></p>

</body>
</html>

重启服务后访问即可正常渲染变量值。


方案2:使用JSP视图

如果项目使用JSP作为视图技术,按以下步骤配置:

  1. 引入JSP相关依赖:内置tomcat jsp支持、jstl标签库。
  2. 配置视图解析器前缀和后缀,例如前缀设置为/WEB-INF/jsp/,后缀设置为.jsp,将页面文件重命名为Response.jsp放到对应目录下。
  3. 修改Controller视图名为Response,不要带后缀。
  4. JSP页面默认支持EL表达式,原来写的${resultUrl}、${embedUrl}可以直接解析,注意不要在page指令中添加isELIgnored="true"配置,否则EL表达式会被禁用。

无模板引擎的兼容方案

如果项目没有引入任何模板引擎,不要使用Model传值后跳转页面的模式,可以将接口改为返回JSON格式的URL数据,前端页面加载时通过AJAX请求接口拿到URL值,再通过JS动态给iframe的src属性、a标签的href属性赋值即可。

内容的提问来源于stack exchange,提问作者Alpharius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 01:12:28