- - PR -
javaBeanのエラーと分割フレームでの表示更新
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2001-11-26 22:03
またまた、質問します。
画面の分割を、サーブレット->親JSP、子フレームJSP3本にて行っています。 JBuilder 5 eeを使用しているのですが、ただの表示はOKなのですが、 下記の問題があります。 なにか、方法があれば教えてください。 1)子フレームJSPでJavaBeanのクラス参照ができない。(親はOK) 2)全体の表示更新がしたいのだが、対象フレーム内だけ表示更新されてしまう。 (Web実行画面のことです。) HTML、CGIのこともよくわかってないのですが、対象画面はフレームが3つ上中下とあり、 表の看板が上フレームで中フレームにて内容を表示しています。 中フレームのデータが多くてもスクロール表示として下フレームの操作フレームは 何時も見えるようにするというものです。 また、データは各フレームで共通でなければいけない為、JavaBeanを使用する 方向で考えていました。 もっと簡単にできる方法があるのでしょうか? 「JavaScriptやクエリーパラメータなどを工夫」の参考になるサイト、本などがあれば 教えてください。よろしくお願いいたします。 | ||||
|
投稿日時: 2001-11-26 22:38
>1)子フレームJSPでJavaBeanのクラス参照ができない。(親はOK)
クラス参照が出来ないとはどういう内容でしょう? エラーが発生している場合は、エラー内容を書いてください。 原因が特定しやすくなります。 あと、親JSPはフレーム定義のJSPということですか? | ||||
|
投稿日時: 2001-11-26 23:20
設計を考え直しましょう。
3つ(ないしは4つ)のJSPに「ほぼ」同時にリクエストが来ますよね。順番は不定だと考えたほうがよいでしょう。どのJSPでBeanが作られ、仮にその途中で別のJSPでの処理が…などという、マルチスレッドと同じような非常にわかりにくい問題が発生します。Beanへのアクセスを同期化せねばならなくなります。 インタフェースの問題なら、 1. メインのフレーム内のHTMLから、JavaScriptで別フレームを操作してリクエストを飛ばす 2. 別の操作フレーム側からJavaScriptでメインのフレームを操作する という方法も考えられますし、CSS のフローティング位置固定要素を使う方法もあります。流行りを考えれば CSS でしょうかね。 [ メッセージ編集済み 編集者: しょむ 編集日時 2001-11-26 23:23 ] | ||||
|
投稿日時: 2001-11-27 13:21
ありがとうございます。
本当は、1本のJSPでフレーム分割、データ操作(サーブレットで作成した)などを したいのです。 参考の本なども別のHTML(JSP)ソースでしかやってません。 なにか、参考になるサイト、本、実ソースなどがあれば教えてください よろろしくお願いします。
| ||||
|
投稿日時: 2001-11-27 13:41
かわっちさん、ありがとうございます。
>1)子フレームJSPでJavaBeanのクラス参照ができない。(親はOK) クラス参照が出来ないとはどういう内容でしょう? エラーが発生している場合は、エラー内容を書いてください。 原因が特定しやすくなります。 あと、親JSPはフレーム定義のJSPということですか? そうです。 ★エラーは Error: 500 Location: /KKKK/BBB/AAA_2Fram.jspInternal Servlet Error:javax.servlet.ServletException: Cannot create bean of class aaa.Customer at というメッセージが起動時に出力されます。 ★長文になりますが、他のサイトに記載した内容を添付します。 機能ですが、よくあるサンプルのオンラインショッピングをにています。 サーブレット(起動)、データ保存等(JavaBean) 、画面(JSP)にて 行うものです。 ただし、今回は画面を上、中、下のフレームに分けて 上フレームで商品別の選択、(お菓子、米、洗剤...)の選択、 中フレームにて商品選択用一覧表示(スクロール有り) 下フレームにて操作(レジ、全部買う、画面展開)などがあるのです。 そこで構成を、 1)ログイン画面(JSP) 2)サーブレット(画面起動、セッション管理) 3)全体画面用(JSP) 4)上フレーム用(JSP) 5)中フレーム用(JSP) 6)下フレーム用(JSP) (起動時) 1)→2)→3)−−→4) |→5) |→6) 1)で、ユーザ名、パスワード入力 2)セッションを作成、ユーザ名、パスワード保存。全体画面JSP呼び出し 3)上、中、下3フレームJSP呼び出し 4)商品項目表示(JavaBeanより情報とりだし。) 5)上フレームに対応する商品一覧表示(JavaBeanより情報とりだし。) 6)操作用フレーム作成 の流れを考えていました。 また、入力はサーブレットに通知をもどすつもりです。 下記にソースを記載します。略していますが、 セッションの宣言とJSP起動方法部分、JSPでのJavaBean宣言部分を含んでいます。 ****************2)サーブレット**************** public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); Customer customer = null; HttpSession session = request.getSession(); if(request.getParameter("login") != null) { /* ログイン処理 */ String userName = request.getParameter("username"); String password = request.getParameter("password"); try { customer = Customer.login(userName, password); session.setAttribute("customer", customer); } catch(SecurityException e) { customer = null; } } else { customer = (Customer)session.getAttribute("customer"); } if(customer == null) { /* ログイン画面 */ getServletContext().getRequestDispatcher("/bbbb/.jsp").forward(request, response); } else { if(request.getParameter("ReaderList") != null) { * * 略 * * } else if(request.getParameter("register") != null) { /* レジへ getServletContext().getRequestDispatcher("/Register.jsp").include(request, response); session.invalidate(); */ } else { /* セッション追加後の画面初期起動 */ getServletContext().getRequestDispatcher("/nyutai/NyutaiKengenSet.jsp").forward(request, response); } } } *********** 3)JSP起動(全体JSP) all_fram.jsp **************** <html> <head> <title>AAAA画面</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <% // ★試験ロジック、この下にある、全体JSPでのuseBeanは参照できます。 %> <jsp:useBean id="customer" scope="session" class="mukogawaNyutai.Customer" > </jsp:useBean> <h1> <%= customer.getUserName() %> さん、いらっしゃい。 </h1><hr> <frameset rows="36%,*" frameborder="NO" border="0" framespacing="0" cols="*"> <FRAME name="topFrame1" noresize src="/KKK/bbb/aaa_1Fram.jsp" > <frameset rows="69%,*" frameborder="NO" border="0" framespacing="0" cols="*"> <frame name="mainFrame" src="/KKK/bbb/aaa_2Fram.jsp" > <frame name="bottomFrame" src="/KKK/bbb/aaa_3Fram.jsp"> </frameset> ************5)中フレーム aaa_2Fram.jsp ************** <html> <head> <title>AAA画面中</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <% // ★試験用,この下のUseBeanは起動時にエラーになってしまいます。 %> <jsp:useBean id="customer" scope="session" class="mukogawaNyutai.Customer" > </jsp:useBean> <h1> <%= customer.getUserName() %> さん、いらっしゃい。 </h1><hr> <%--*** JAVA使用変数宣言 ***--%> <% int icnt; /*カウンター1*/ %> <% int jcnt; /*カウンター2 */ %> <% String checkbox_name[] = { "checkbox1","checkbox2","checkbox3","checkbox4","checkbox5","checkbox6","checkbox7","checkbox8"}; %> <body bgcolor="#FFFFFF" text="#FFFF66" background="/bbb/back02.png" link="#FF00FF"> <div id="Layer1" style="position:absolute; left:35; top:0; width:936px; height:505px; z-index:3; font-family:Osaka, MS Pゴシック"> <table width="100%" border="1" bgcolor="#FFFF90"> <% for(icnt=0; icnt<20; icnt++) { /* リーダ数ループ */ %> <tr> <td width="109"><font color="#008080" size="-1">NAME1</font></td> <td width="216"><font color="#008080" size="-1">NAMA2</font></td> <td width="115"><font color="#008080" size="-1">NAMA3</font></td> <% for(jcnt=0;jcnt<8; jcnt++) { %> <td width="53" height="10"><div align="center"> <font color="#008080"> <input type="checkbox" name="chekbox" checked onclick="click_mes()" value="<% out.print(checkbox_name[jcnt].toString()); %>"> </font><font color="008080"></font></div> </td> <% } %> </tr> <% } %> </table> </div> </FORM> </body> </html> *********** Customerクラス********************** package aaa; import java.io.Serializable; public class Customer implements Serializable { //ログイン認証 public static Customer login(String userName, String password) throws SecurityException { if((userName != null) && (password != null) && (!userName.equals("")) && (!password.equals(""))) { // ここでパスワードチェックをして、エラーならSecurityExceptionを発生させる return new Customer(userName, password); } throw new SecurityException(); } private Customer() { this(null, null); } private Customer(String userName, String password) { cart = new Cart(); setUserName(userName); setPassword(password);- } //ユーザ名プロパティ public void setUserName(String userName) { this.userName = userName; } public String getUserName() { return userName; } //パスワード・プロパティ public void setPassword(String password) { this.password = password; } public String getPassword() { return password; } //買い物かご取得 public Cart getCart() { return cart; } private void writeObject(ObjectOutputStream oos) throws IOException { oos.defaultWriteObject(); } private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { ois.defaultReadObject(); } private Cart cart; private String userName; private String password; } 長い文ですいません。何か、気が付いた点があれば教えてください。 構成の設計見直しをが必要なのでしょうか...... 愚痴ですが、画面デザインは別担当なんだけど作りかたなど しらないので、いいようにデザインします... エンドユーザの言うとおりなのですが... :以上
| ||||
|
投稿日時: 2001-11-28 11:32
>1)ログイン画面(JSP)
>2)サーブレット(画面起動、セッション管理) >3)全体画面用(JSP) >4)上フレーム用(JSP) >5)中フレーム用(JSP) >6)下フレーム用(JSP) この構成であれば私が前にやっていたシステムと似ているのですが、 どうも複数のフレームで同時にBeanを参照するのがまずいみたいですね。 しょむさん、Beanへのアクセスを同期化というのはどのようにするのでしょうか? 私の場合、 1)フレーム定義JSPの中で、業務ロジック用サーブレットを呼び出す。 2)業務ロジック用サーブレットから上フレームJSPをディスパッチ 3)上フレームJSPのOnLoad時に中フレームJSPを呼び出す。 4)下フレームでもBeanが必要であれば、同じように中フレームのOnLoad時に 下フレームを呼び出す。 これでBeanの同時参照は防げるので、エラーは発生しなくなると思います。 | ||||
|
投稿日時: 2001-11-29 02:20
いろいろめんどくさい事が起こりそうなのでやりません(わ まぁ、更新系はBeanのメソッドをsynchronizedにして、Beanの生成は最初にリクエストを受けてフレームを返すServletだかJSPだかにやらせとけばいいのでは。 プロパティのセット部分がちょっと面倒そうですけどねぇ…。 | ||||
|
投稿日時: 2001-12-05 17:04
みなさん
こんにちは このThreadは結構実用的な問題ではないかと思いますので このテーマに関して ご経験でもよろしいですがさらに議論できないでしょうか。 kazuさん 以降はどうなりましたか。 | ||||
1
