实际上,我的任务是将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>
答案 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实例。