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

如何在JSP页面中访问未指定属性名的ModelAndView对象?

访问未指定属性名的ModelAndView对象

嘿,我来帮你理清这个问题——其实Spring MVC对未指定属性名的ModelAndView对象已经做了贴心的处理,不用太纠结~

首先,先明确核心规则:当你在Controller里调用ModelAndView.addObject(Object object)不指定属性名时,Spring会自动根据对象的类名生成一个默认属性名:把类名的首字母改成小写。比如你的Student类,默认属性名就是student——这也是你现在JSP里${student.getName()}能工作的原因(前提是你的Controller里确实是直接添加了Student对象而没指定名字)。

更简洁的EL写法

顺便提一句,EL表达式支持直接访问对象的属性(对应getter方法),所以完全不用写getXXX(),直接用${student.name}和${student.age}就可以拿到值,代码更干净:

<tr>
    <td>Name</td>
    <td>${student.name}</td>
</tr>
<tr>
    <td>Age</td>
    <td>${student.age}</td>
</tr>

如果你不确定默认属性名怎么办?

有两种解决方式:

  1. 手动指定属性名(推荐):在Controller里添加对象时明确指定名字,这样代码更清晰,也不会因为类名变化导致JSP报错。比如:
@RequestMapping("/submit")
public ModelAndView showStudentInfo() {
    Student student = new Student("Arun", 28);
    ModelAndView mav = new ModelAndView("result");
    // 明确指定属性名为myStudent
    mav.addObject("myStudent", student);
    return mav;
}

然后JSP里就可以用${myStudent.name}访问。

  1. 遍历模型中的所有属性:如果你真的不知道模型里有哪些对象,可以通过model.asMap()遍历所有键值对,但这种场景比较少见,适合调试或者动态展示的情况。不过需要先引入JSTL的core标签库:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<c:forEach var="entry" items="${model.asMap()}">
    <p>属性名:${entry.key},属性值:${entry.value}</p>
</c:forEach>

这样就能看到所有自动生成的属性名和对应的对象了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:28:42