无法使用包将一个java类的方法用于第二个类

时间:2012-11-19 22:16:47

标签: java jsp

实际上,我的任务是将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> set path = 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>

2 个答案:

答案 0 :(得分: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的教程。

答案 1 :(得分:-2)

问题是在DataBean Class中你创建了另一个UserBean实例,它与你在jsp页面中创建的实例不同。

在类DataBean中试试这个:

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

“u” - 是您要使用的UserBean实例。