Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在JSP中获取ModelAttribute成员变量_Java_Jsp_Modelattribute - Fatal编程技术网

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

Java 无法在JSP中获取ModelAttribute成员变量,java,jsp,modelattribute,Java,Jsp,Modelattribute,我有以下课程 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; } } 以下控制器 clas

我有以下课程

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的值

我在barJSP中有以下两种JSP变体,它们试图打印foo VAL

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

这个打印为空。然而

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

这将按预期打印testFooVal(它实际上打印toString()返回的内容)


我对jsp语法的理解是这样的。用于访问成员,只要为其定义了getter,它就应该工作。我遗漏了什么吗?

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

 ${barModel.foo}
否则,您必须导入模型类并进行转换:

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

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

在下列情况下

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

属性
barModel.foo
不可访问,因为它是类中的
private
变量,方法将找不到它。因此它返回
NULL

但在这种情况下


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

我对spring mvc的理解是,如果模型属性private members存在getter,那么它是可访问的。我不想破坏封装。@ArunavSanyal${barModel.foo}隐式调用getFoo()方法。