-1

我有一个查询..

  1. Servlet 调用了一些业务逻辑(在“MyPack.abc”类中)并获得了一些返回值。
  2. 现在这个值被设置为会话“result”并调用了 sendRedirect("xy.jsp")。
  3. 我想借助<jsp:useBean id="result" class="MyPack.abc" scope="session"></jsp:useBean><jsp:useBean>显示异常 CastException(Java.lang.String 无法转换为类)在 jsp 中获取此值。

这是代码:

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。这是因为您试图访问一个bean根本没有放在会话范围内的使用,所以 JSP 正在创建一个全新的,而不是在会话中重用现有的。您在会话中仅设置字符串名称属性。
要在 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 使用Bean
  3. 为什么 jstl ${结果}
于 2013-09-08T17:32:10.323 回答