无法在 JSP 中获取 ModelAttribute 成员变量

Unable to get ModelAttribute member variable in JSP

我有以下class。

class Bar {

   public Bar(String fooVal) {
      this.foo = fooVal;
   }

   private String foo; 

   public String getFoo() {
       return this.foo;
   }

   @Override
   public String toString() {
       return this.foo;
   }

}

以下控制器

class Controller {
    @RequestMapping(value = "/foo", method = RequestMethod.GET)
    public ModelAndView() {
        return new ModelAndView("barJSP", "barModel", new Bar("testFooVal"));
    }
}

现在我试图在 jsp 中访问 foo 的值。

我在栏中有以下两个 JSP 的变体 JSP 试图打印 foo Vals。

<% System.out.println(pageContext.findAttribute("barModel.foo")); %>

这将打印空值。不过

<% System.out.println(pageContext.findAttribute("barModel")); %>

这按预期打印了 testFooVal(它实际上打印了 toString() returns 的内容)。

我对 jsp 语法的理解是 .用于访问成员,只要为它定义了 getter 就应该可以工作。我错过了什么吗?

您可以使用 JSP EL 轻松访问对象:

 ${barModel.foo}

否则,您必须导入模型 class 并转换为转换:

<%@ page import="com.example.model.Bar"%>
<% Bar b = (Bar)(pageContext.findAttribute("barModel"));
   out.println(b.getFoo());
%>

方法findAttribute()按以下顺序在所有四个级别中搜索指定的属性——页面、请求、会话和应用程序。 它 returns NULL 当在任何级别都找不到属性时。

在下面的情况下

<% System.out.println(pageContext.findAttribute("barModel.foo")); %>

属性 barModel.foo 不可访问,因为它是 class 中的一个 private 变量,并且该方法找不到它。所以它 returns NULL.

但是在

的情况下

<% System.out.println(pageContext.findAttribute("barModel")); %>

属性 barModel 在上下文中可用,打印时它会自动调用 toString() 方法。