- PR -

jsp:useBeanの行でエラーとなってしまう

1
投稿者投稿内容
つちつち
会議室デビュー日: 2004/10/21
投稿数: 17
投稿日時: 2004-10-31 12:41
こんにちは、
JSP・サーブレット・javaBeansを組み合わせて、J2EEっぽく
プログラミングを行う勉強を行っているのですが、壁にぶつかっています。
どうか皆さまお力をお貸し下さいませ。。。

内容ですが、
JSPの以下の行で実行時にエラーが発生してしまいます。
<jsp:useBean id="pageNumber" class="java.lang.Integer" scope="request" />

Eclipse による編集時や、Lomboz によるデプロイ時にはエラーは発生しません。
Webブラウザで実行したタイミングでエラーとなります。
Tomcat のバージョンは 5.0.28 です。
もしかして、バージョン 4 でないとダメなのでしょうか?
ビルド時にエラーがでないので、おそらくTomcat側の設定が悪いのではないかと
いろいろ調べているのですが解決にいたりません、どなたかヘルプをお願いします。
他に必要な設定資料があれば、ご指定いただければ提示しますのでよろしくお願いします。


※実行時エラーメッセージ
------------------------------------------------------
説明 The server encountered an internal error () that prevented it from fulfilling this request.
例外

org.apache.jasper.JasperException: /page/showList.jsp(9,0)
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:150)
org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1227)
org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1116)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)
org.apache.jasper.compiler.Node$Root.accept(Node.java:456)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Generator.generate(Generator.java:3272)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:244)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:470)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
vacation6.VacationController.doPost(VacationController.java:77)
vacation6.VacationController.doGet(VacationController.java:50)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:87)
------------------------------------------------------


※ [showList.jsp]
------------------------------------------------------
<%@ page language="java"
import="java.util.*"
pageEncoding="Windows-31J"
contentType="text/html; charset=Windows-31J"
%>
<%@ page import="vacation6.*" %>

<jsp:useBean id="vacationTable" class="vacation6.VacationTable" scope="application" />
<jsp:useBean id="pageNumber" class="java.lang.Integer" scope="request" />
<jsp:useBean id="items" class="java.util.List" scope="request" />
<jsp:useBean id="hasNextPage" class="java.lang.Boolean" scope="request" />
↓続く
------------------------------------------------------


環境
PC WinXP
eclipse3.01
lomboz.301
tomcat5.0.28
j2sdk 1.4.2_05
torakiyojp
常連さん
会議室デビュー日: 2004/08/04
投稿数: 23
投稿日時: 2004-10-31 22:41
こんばんは。

的を外していたら、すみません。
<jsp:useBean id="pageNumber" class="java.lang.Integer" scope="request" />
ですが、pageNumberにnullが来ているということは、ありませんか?
試しに、サーブレットで、
pageNumber = new Integer(1);
としたものをrequestにセットしてみてください。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-11-01 09:34
パット見間違いないように見えますね。実行時ではなくコンパイル時のエラーのようです。
JSP 中に文法的におかしな箇所はありませんか?
torakiyojp
常連さん
会議室デビュー日: 2004/08/04
投稿数: 23
投稿日時: 2004-11-01 21:26
こんばんは。

的を外したようで。
今日、会社で前に経験したエラーのメッセージと比較したら別のものでした。
すみません。
私が経験したのは、jsp:useBeanでIntegerを使っているJSPがあった場合に、WASのバージョンをV5にアップすると、そこにnullが来ていると、イニシャライズに失敗というような、Exceptionが出るものでした。nullを送らないようにして対応した記憶があったもので。

原因不明のコンパイル時エラーだとすると、私の場合、JavaScriptのエラーが出ようが、HTMLが壊れようが、無視して、エラーが出なくなるまで、ソースを削って、場所を特定する方法をとります。参考になれば・・・
IanBrown
会議室デビュー日: 2003/10/17
投稿数: 8
投稿日時: 2004-11-01 23:08
こんばんは。

JSPのuseBeanアクションで指定するオブジェクトはJavaBeans仕様に従っている必要があります。
その一つは、デフォルトコンストラクタ(引数なしコンストラクタ)が定義されていることがですが、
APIドキュメントを見ると、java.lang.Integer にはデフォルトコンストラクタは定義されていない
ように見えます。

もし、それが原因であるなら、JSPのuseBeanにjava.lang.Integer を直接指定するのではなく、
java.lang.Integerのフィールドを持つbeanクラスを定義して、それをuseBeanに指定すれば
問題が解決すると思います。
新たに定義するbeanクラスには、デフォルトコンストラクタの定義を忘れずに

# この問題は、Tomcat5系で発生します。(Tomcat4系では発生しません。)
つちつち
会議室デビュー日: 2004/10/21
投稿数: 17
投稿日時: 2004-11-02 10:50
こんにちは

アドバイスありがとうございます。
早速、Integerフィールドを持つBeanを作成し、トライしたところこの行でのエラーは出なくなりました。
今回、以下のように修正しました。

MyInteger というクラスを作成し、
public Integer mint; というメンバ変数を作成しました。
デフォルトコンストラクタも作成しました。

それで、JSPの方を
<jsp:useBean id="pageNumber" class="vacation6.MyInteger" scope="request" />

<%=pageNumber.mint.intValue()+1%>

といった感じで動かしたところ、今回のエラーはなくなりました。(他のエラーが出で別途調べてますが。。。)

ただ、Beanクラスのメンバ変数 mint をpublicにして、とりあえず動かしましたが、
こういう場合の正しいBeanの作り方はどんな風にするべきなのでしょうか?
初心者なので申し訳ございません。。。
1

スキルアップ/キャリアアップ(JOB@IT)