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()方法。