无法在JSP

时间:2017-03-27 23:29:31

标签: 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;
   }

}

以下控制器

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就应该工作。我错过了什么吗?

2 个答案:

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