1

実際、私の仕事は、同じパッケージ内にJava Beanクラスを作成し、それらをJSP(Javaサーバーページ)で使用することです。

以下は私がしていることです。

パッケージ名:mypack * 1番目のクラス名:UserBean.java *(すべてのgetterおよびsetterメソッドを含む) 2番目のクラス名: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>javacDataBean.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ページで、2つのオブジェクトをインスタンス化しました

<%@ 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オブジェクトではありません。

これは、2つのボトルを開けて、一方のボトルにメッセージを入れ、もう一方のボトルの中を見て、最初のボトルに入れたメッセージを見つけるようなものです。Javaオブジェクトは実際のオブジェクトにいくぶん似ているため、ボトルでは機能せず、Javaオブジェクトでも機能しません。

あなたができることの1つは、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

問題は、DataBeanクラスでUserBeanの別のインスタンスを作成することです。これは、jspページで作成するものと同じではありません。

クラスDataBeanでこれを試してください:

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

「u」-使用するUserBeanのインスタンスです。

于 2012-11-19T22:23:39.177 に答える