Cast异常:Java.lang.String无法强制转换为类

时间:2013-09-08 05:19:01

标签: jsp servlets javabeans

我有一个查询..

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

    index.jsp

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

    servlet 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"); 
        }
      }   
    

    myPack中的bean类abc

     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无法强制转换为类)。

1 个答案:

答案 0 :(得分: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 会话属性的键这意味着您正在尝试将类abc类型的对象设置为String结果。

<强>解决方案:
只需将xy.jsp result的id属性重命名为r或abc即可。这解决了您的异常问题,但在运行应用程序后,您会看到名称为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> 

在运行您的应用之前,在WEB-INF\lib文件夹中添加jstl-1.2.jar。这很好用。

一些有用的链接:

  1. jsp wiki
  2. jsp useBean
  3. why jstl ${result}