我有以下课程。
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中尝试打印foo Vals时有以下两种JSP变体。
<% System.out.println(pageContext.findAttribute("barModel.foo")); %>
这打印为null。然而
<% System.out.println(pageContext.findAttribute("barModel")); %>
这会按预期打印testFooVal(它实际打印toString()返回的东西)。
我对jsp语法的理解是这样的。用于访问成员,并且只要为其定义了getter就应该工作。我错过了什么吗?
答案 0 :(得分:1)
您可以使用JSP EL
轻松访问对象:
${barModel.foo}
否则,您必须导入模型类并转换为转换:
<%@ page import="com.example.model.Bar"%>
<% Bar b = (Bar)(pageContext.findAttribute("barModel"));
out.println(b.getFoo());
%>
答案 1 :(得分:0)
方法findAttribute()
按以下顺序搜索所有四个级别中的指定属性 - 页面,请求,会话和应用程序。
如果在任何级别找不到任何属性,它将返回NULL
。
在以下情况
<% System.out.println(pageContext.findAttribute("barModel.foo")); %>
属性barModel.foo
无法访问,因为它是类中的private
变量,方法无法找到它。所以它返回NULL
。
但是在
的情况下 <% System.out.println(pageContext.findAttribute("barModel")); %>
属性barModel
在上下文中可用,当您打印时,它会自动调用toString()
方法。