-1

質問があります..

  1. サーブレットは (クラス "MyPack.abc" で) いくつかのビジネス ロジックを呼び出し、いくつかの戻り値を取得しました。
  2. これで、この値がセッション「result」に設定され、sendRedirect("xy.jsp") が呼び出されます。
  3. の助けを借りてjspでこの値をフェッチしたいが、<jsp:useBean id="result" class="MyPack.abc" scope="session"></jsp:useBean>CastException<jsp:useBean>の例外が表示されている(Java.lang.Stringはクラスにキャストできない)。

コードは次のとおりです。

index.jsp

<html> 
<body> 
  <form action="MyController"> 
   <input type="text" name="name"><br> 
    <input type="submit" name="b1" value="submit">
  </form> 
</body> 
</html>  

サーブレットMyController

import javax.servlet.*;
import java.io.*;
import javax.servlet.http.*;
import myPack.*;
 public class MyController extends HttpServlet 
 { 
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
   { 
      response.setContentType("text/html;charset=UTF-8"); 
      PrintWriter out = response.getWriter(); 
      abc d=new abc(); 
      d.setName((String)request.getParameter("name"));
      String s=(String) d.getName(); 

      HttpSession session=request.getSession(); 
      session.setAttribute("result",s); 
      response.sendRedirect("xy.jsp"); 
    }
  }   

abcmyPack の Bean クラス

 package myPack; 

 public class abc { 

 public abc() { } 
 public String name; 

 public String getName() { 
   return name; 
 } 
 public void setName(String name) {
  this.name = name; 
 } 
} 

xy.jsp

 <%@page contentType="text/html" pageEncoding="UTF-8" import="myPack.abc" %> 
 <html>
 <body>
  <jsp:useBean id="result" class="myPack.abc" scope="session"></jsp:useBean> 
  <jsp:getProperty property="name" name="r"></jsp:getProperty>
 </body> 
 </html>   

しかし、CastException をスローしています (Java.lang.String はクラスにキャストできません)。

4

1 に答える 1

0

私は多くの努力をしてあなたの問題を解決しました。あなたの情報はコメントから簡単に読み取れないためです。

<jsp:useBean id="beanInstanceName" scope="page|request|session|application"
             class="package.class" type="package.class" 
             beanName="package.class | <%= expression %>">
</jsp:useBean>   

あなたの間違い

session.setAttribute("result",s); //setting the attribute with String key as result

およびxy.jspスロー例外の行org.apache.jasper.JasperException: java.lang.ClassCastException: java.lang.String cannot be cast to myPack.abc

<jsp:useBean id="result" class="myPack.abc" scope="session"></jsp:useBean>

構文の最初の属性を見てくださいid="beanInstanceName"。これはBeanクラスのインスタンスであり、abc使用resultしたセッション属性のキーは、タイプクラスのオブジェクトabcString結果に設定しようとしていることを意味します。

解決策:
id 属性の名前xy.jsp resultを r や abc などに変更するだけです。これで例外の問題は解決しますが、 app を実行すると name is と表示されますnull。これは、セッション スコープにまったく配置していない usingにアクセスしようとしているためです。そのため、JSP はセッションで既存のものを再利用するのではなく、まったく新しいものを作成しています。beanセッションで文字列名属性のみを設定しています。
jspで Bean プロパティnameを取得するには、編集する必要がありますxy.jsp

<%@page contentType="text/html" pageEncoding="UTF-8" import="myPack.abc" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<body>
   <c:out value="${result}" />
</body> 
</html> 

アプリを実行する前に、フォルダーにjstl-1.2.jarWEB-INF\libを追加します。これはうまくいきます。

いくつかの便利なリンク:

  1. jspウィキ
  2. jsp useBean
  3. なぜ jstl ${result}
于 2013-09-08T17:32:10.323 に答える