1

实际上,我的任务是在同一个包中创建 java bean 类并将它们用于 JSP(java 服务器页面)。

下面是我正在做的事情。

包名:mypack *第一个类名:UserBean.java *(包含所有getter和setter方法) 第二个类名:Databean.java(包含与数据库交互的方法)
d:\java: jdk1.5和tomcat,两者都是在这个文件夹中。

UserBean.java: 我想使用这个类的setter和getter方法来设置和获取值。 DataBean.java:我想使用这个类的方法与 MS Access 数据库进行交互,如获取、更新、删除等。对于这些操作,我想将 UserBean 类对象实例化为 DataBean 类来设置和获取 DataBean 类的值。

我是如何编译的?

d:\java\mypack> 设置路径=d:\java\jdk1.5\bin
d:\java\mypack>javac UserBean.java

但是当我在 DataBean 类中实例化 UserBean 类的对象时,我得到了我已经提到的错误。

d:\java\mypack>javac DataBean.java
在这里我得到了上面的错误信息

为了解决这个问题,我稍微修改了编译行:

d:\java\mypack>javac -classpath .. DataBean.java
这工作并成功生成类文件

目前,这两个类都已成功编译。现在还有另一个问题,在下面进行描述。

package mypack;
**//UserBean.java**
public class UserBean{
       String username;    //an attribute of UserBean Class
       String password;    //an attribute of UserBean Class

public UserBean(){} //Default Constructor of UserBean Class
public void setUsername(String username){ this.username = username;   }//setter      method
       public String getUsername(){return username; } //getter method
}

package mypack;
**//DataBean.java**
public class DataBean{
       UserBean user = new UserBean();  //Instantiating UserBean class object in
       //DataBean class
       String username;     //an attribute of DataBean Class

       public DataBean(){}  //Default Constructor of UserBean Class
       public String getUsernameTwo(){return user.getUsername(); } //gettter method
}

在jsp页面上,我实例化了两个对象

<%@ page import="java.sql.*, mypack.*"%> //importing packages
<html>
<body>
<%
UserBean u = new UserBean(); *//UserBean class object u has been instantiated*
DataBean d = new DataBean(); //DataBean class object d has been instantiated

u.setUsername("John");  //username has been set as john
out.println(u.getUsername()); //gets the string john, and prints it successfully 
(prints: John)

out.println(d.getUsernameTwo()); //Does'nt print John, but prints null 
                                 //**(it should print john too but it doesnt)**
%> 
</body>
</html>
4

2 回答 2

4

getUsernameTwo() 方法返回已在 DataBean 的构造函数中创建的 UserBean 的用户名。此 UserBean 实例与您在 JSP 中实例化的 UserBean 对象不同。

这就像打开两个瓶子,在其中一个瓶子里放一条信息,然后在另一个瓶子里看,希望能找到你放在第一个瓶子里的信息。它不适用于瓶子,也不适用于 Java 对象,因为 Java 对象有点像真实对象。

您可以做的一件事是让 DataBean 使用在其 cnstructor 中传递的 UserBean:

public class DataBean{
    private UserBean user;       

    public DataBean(UserBean user) {
        this.user = user;
    }

    public String getUsernameTwo() {
        return user.getUsername(); 
    }
}

在您的 JSP 中:

<%
UserBean u = new UserBean();
DataBean d = new DataBean(u);

u.setUsername("John");
out.println(u.getUsername());
out.println(d.getUsernameTwo());
%>

看来您还没有掌握基本的 OO 概念。我建议在使用 JSP 之前先开始学习基本 Java 和 OO 的教程。

于 2012-11-19T22:29:42.797 回答
-2

The problem is that in DataBean Class you create another instace of UserBean, that is not the same with the one that you create in the jsp page.

In class DataBean try this:

UserBean user = (UserBean)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("u");

"u" - is your instance of UserBean that you want to use.

于 2012-11-19T22:23:39.177 回答