Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

jsp:useBean 実行時エラーについて

下記のソースで、Eclipseではコンパイルエラーは出ないのですが実行時にエラーが出てしまいます。

-------------Javaソース-----------------------
package HelperBean;

public class HelperBean {

    private int intProperty;
    private String stringProperty;
    
    public HelperBean(){}
    
    public void setIntProperty(int value){
        intProperty = value;
    }
    
    public int getIntProperty(){
        return intProperty;
    }
    
    public void setStringProperty(String value){
        stringProperty = value;
    }
    
    public String getStringProperty(){
        return stringProperty;
    }
}


---------------JSPソース--------------------
<%@ page language="java" contentType="text/html; charset=windows-31j"
    pageEncoding="windows-31j"%>
<%@ page import="HelperBean.*" %>
<jsp:useBean id="myHelperBean" type="HelperBean" scope="page"/>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>

<%
    myHelperBean.setIntProperty(25);
%>

Value of int property is:
<%= myHelperBean.getIntProperty() %>
</body>
</html>


-----------エラーログ-----------------
type 例外レポート

メッセージ 

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外 

org.apache.jasper.JasperException: Exception in JSP: /UseBean.jsp:4

1: <%@ page language="java" contentType="text/html; charset=windows-31j"
2:     pageEncoding="windows-31j"%>
3: <%@ page import="HelperBean.*" %>
4: <jsp:useBean id="myHelperBean" type="HelperBean" scope="page"/>
5: 
6: <html>
7: <head>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:467)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:371)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


原因 

javax.servlet.ServletException: bean myHelperBean not found within scope
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
    org.apache.jsp.UseBean_jsp._jspService(UseBean_jsp.java:76)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


原因 

java.lang.InstantiationException: bean myHelperBean not found within scope
    org.apache.jsp.UseBean_jsp._jspService(UseBean_jsp.java:49)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)



class属性で宣言してもダメでした。
idで指定している変数が見つかりませんみたいな事を言われてるんでしょうか・・・
参照用の変数だから関係ないと思うのですが、どなたかご教授お願いします。

7

回答

12641

閲覧

7件の回答

評価

0

Javaにあまり詳しくないので
参考程度にしてください。

<jsp:useBean id="myHelperBean" type="HelperBean" scope="page"/>にclass属性を指定して
やってみてください。

評価

0

class 属性は完全修飾名だったような、、、。
eclipse ならパッケージ名.クラス名とするはず、、。
はずしてたらすみません。

評価

0

普段使わないからなんだけど
 bean myHelperBean not found within scope

 どのスコープにも bean myHelperBean ありません

がエラーの原因かとおもうけど

scope="page"だしjsp上で定義していないので page スコープにありませんといったところかな?

eclipse では JSPのコンパイルはしません。
チェックしてくれるプラグインはありますが。

評価

0

>Javaさん
クラス属性で指定もやってみたのですが、「useBeanのクラス属性 HelperBean の値が無効です」といったエラーが出てくるのでtype属性で指定していました。

>いいKagenさん
私も調べて、そういう記述を見つけて試してみたのですが、なぜかコンパイルエラーに。。。
今回の場合だと「class="HelperBean.HelperBean」とすれば良いかと思ったのですが。。。

>杏さん
TOMCATプラグインを使用しております。
id属性って、オブジェクトインスタンス名で任意で名前付けちゃっていいと認識してるんですが、間違ってませんよね?


ちょっと進展(ソースは一切変わりませんが)がありました。
今まで、実行結果を確認する時にブラウザを更新して結果を確認していました。
それだと、投稿したエラーが出てました。
しかし、いったん別のJSPを実行した後に、当JSPを実行すると期待する結果が表示されました。
初回実行時は上手くいき、2回目以降ではエラるようです。。。
2回目以降は初回実行時のコンパイル結果を使うのが関係してるんでしょうか?
ちなみに以下のようなソースだと更新でも正しく結果表示されます。

----------ソース1------------------
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h2>My favorite cousins are: <br></h2>
<%@ include file = "Children.jsp" %>
</body>
</html>

--------------ソース2-----------------
C <%= new java.util.Date() %> <br> 
D <%= new java.util.Date() %>

評価

0

あ、回答のお礼をわすれてました。
みなさん回答ありがとうございますm(_ _)m

評価

0

そのままコピーをしてclass属性追加したら
俺の環境ではできたけど…。

評価

0

解決しました。
パッケージ名もクラス名も「HelperBean」でやっているとclass属性を指定する際に「class="HelperBean.HelperBean"」と記述してコンパイルエラーになっていました。
そこで、パッケージ名を「helper」とかに変えてみました。
するとclass属性を指定する際に「class="helper.HelperBean"」でコンパイルも通り、正しく実行されました。
Javaさんの環境では正しく動いたということなので環境周りの問題だったのでしょうか・・・
ちなみにEclipseがver3.3で、TOMCATがver5.5を使っています。

皆様、ご回答有り難うございました。
また、お世話になる事があると思いますが、よろしくお願いします。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。