简单的JSP表达式语言代码不起作用

时间:2014-05-22 01:21:32

标签: java jsp java-ee servlets jstl

我有一个Person类和Dog类。人有一只狗。我从一个简单的html文件发送一个post http request到一个servlet。在servlet中,我添加了一个人和他的狗作为请求的属性。 servlet将此请求转发给jsp,jsp应使用表达式语言或EL打印狗的名称。

我按照书中的所有说明操作,输出错误。请 帮我修改我的代码。

预期输出 - 狗的名字是:狗。 实际输出 - 狗的名字是:

Servlet的doPost -

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    Person p = new Person();
    Dog d = new Dog();

    p.setName("Man");
    d.setName("dog");

    request.setAttribute("person", p);

    RequestDispatcher view = request.getRequestDispatcher("/jsp/MyJsp.jsp");
    view.forward(request, response);

}

JSP主要代码 -

<html>
<body>
Dog's name is: ${person.dog.name}
</body>
</html>

Pojos和stacktrace的完整代码 -

狗 -

package foo;

public class Dog {

    private String name;

    public String getName() {return name;}

    public void setName(String name) {this.name = name;}

}

人 -

包foo;

公共类人员{

String name;
Dog dog;

public String getName() {return name;}
public void setName(String name) {this.name = name;}

public Dog getDog() {return dog;}
public void setDog(Dog dog) {this.dog = dog;}

}

我重新启动了eclipse和tomcat,我的代码也运行了。

2 个答案:

答案 0 :(得分:4)

你没有为这个人设置一只狗。

p.setDog(d);  

答案 1 :(得分:0)

您的Person课程需要公开的setter和getter Dog方法。您的Dog课程需要公开的setter和getter Name方法

E.g。

 public class Person { ...

     private Dog dog;

     public Dog getDog () {return dog;} 

     .....