【问题标题】:How to access a ModelAndView object added without attribute name within the jsp page如何访问在jsp页面中添加的没有属性名称的ModelAndView对象
【发布时间】:2018-09-06 23:16:53
【问题描述】:

我在浏览 Spring MVC 教程时遇到了 ModelAndView。

我的 JSP 视图如下所示,

<%@taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
<html>
   <head>
      <title>Spring MVC </title>
   </head>
   <body>

      <h2>Submitted Student Information</h2>
      <table>
         <tr>
            <td>Name</td>
            <td>${student.getName()}</td>
         </tr>
         <tr>
            <td>Age</td>
            <td>${student.getAge()}</td>
         </tr>
         <tr>
            <td>ID</td>
            <td>${student.getBranch()}</td>
         </tr>
      </table>  
   </body>
</html>

当我像下面这样在控制器中设置属性名称和属性值时,它起作用了,

ModelAndView mv = new ModelAndView();
        mv.setViewName("result");
        Student student = new Student("arun2", "CSE", 22);
        mv.addObject("student",student);
        return mv;

然后我遇到了其他重载方法ModelAndView.addObject(Object attributeValue),我尝试只设置属性值mv.addObject(student);,但这一次它没有在浏览器中显示学生详细信息。

我的问题:

  1. 是否可以通过设置属性值来访问 JSP 中的这些值,就像我第二次做的那样 mv.addObject(student);
  2. 如果是,如何?如果不是,为什么我们有这样的重载方法?如果我们无法在视图 (JSP) 中访问它,为什么我们只需要设置值?

我浏览了 javadocs,但没有找到任何可以让我理解的内容。

【问题讨论】:

    标签: java jsp spring-mvc modelandview


    【解决方案1】:

    是的,你可以这样做并访问参数,但需要注意。

    ModelAndView查看addObject的API,它会显示如下方法:

    那么,我们来看看ModelMap.addAttribute(Object)的定义

    它显示使用generated name生成名称的定义如下:

    所以,如果你只是想使用mv.addObject(student)方法,你可以访问你的jsp页面中的数据,如下:

    <%@taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
    <html>
       <head>
          <title>Spring MVC </title>
       </head>
       <body>
    
          <h2>Submitted Student Information</h2>
          <table>
             <tr>
                <td>Name</td>
                <td>${student.name}</td>
             </tr>
             <tr>
                <td>Age</td>
                <td>${student.age}</td>
             </tr>
             <tr>
                <td>ID</td>
                <td>${student.branch}</td>
             </tr>
          </table>  
       </body>
    </html>
    

    如果对象是Group类,那么你可以通过${group.name}获取值

    注意 ModelAndView 来自 org.springframework.web.servlet.ModelAndView

    另外,我建议您使用EL Expressions直接访问您的jsp页面中的数据。

    【讨论】:

    • 但是如果我添加同一个类的多个属性呢?是否允许?假设我添加了 Student 类的两个属性 student1 student2。现在怎么办?
    • 我昨天刚测试了添加一个相同类的对象,效果很好,你可以自己试试,可能会有一些异常
    • 我也试过了。它只能按照您解释的方式工作。如果我们设置2个对象student1student2属于同一类Student,它只需要我们在控制器中设置的第一个对象。
    • 这很奇怪,大多数情况下后一个会覆盖前一个
    • 我也是这么想的!但这就是我测试时的工作方式。
    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多