如何在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>
如果你不确定默认属性名怎么办?
有两种解决方式:
- 手动指定属性名(推荐):在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}访问。
- 遍历模型中的所有属性:如果你真的不知道模型里有哪些对象,可以通过
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
相关产品推荐
相关产品推荐

