2015-01-03 5 views
1

Я новичок в java beans и JSP. В моем проекте, что я сделал, я создал несколько бобов, таких как LoginBean, RegisterBean, AddCourseBean и т. Д.Проблема с реализацией класса Bean в Java-ClassCastException

Предположим m на странице A.jsp, которая использует bean LoginBean для получения и настройки некоторых свойств. После этого m, перемещаясь на страницу B.jsp, которая использует другой компонент, скажем RegisterBean для установки некоторого свойства или добавления данных в базу данных.

При движении со страницей А до В м получения ошибочного в коте

HTTP Status 500 - java.lang.ClassCastException: ankit.ShowCourseBean cannot be cast to ankit.LoginBean 

type Exception report 

message java.lang.ClassCastException: ankit.ShowCourseBean cannot be cast to ankit.LoginBean 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

org.apache.jasper.JasperException: java.lang.ClassCastException: ankit.ShowCourseBean cannot be cast to ankit.LoginBean 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

root cause 

java.lang.ClassCastException: ankit.ShowCourseBean cannot be cast to ankit.LoginBean 
    org.apache.jsp.components.jsp.Login_jsp._jspService(Login_jsp.java:72) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.42 logs. 

Мой код в странице JSP, чтобы использовать боб выглядит следующим образом: Page A.jsp

<%@ page language="java" %> 
    <%@ page import="java.sql.*;" %> 

    <%! 
    ResultSet rs; 
    String coursename,courseid; 
    %> 

    <jsp:useBean id="obj" scope="application" class="ankit.ShowCourseBean" /> 

    <% 
     rs=obj.getCourse(); 
    %> 
//my remaining Html and logic 

Страницы B.jsp

<%@ page language="java" %> 
<%! 
boolean b; 
String myemail, mypassword,userName,userType; 
%> 

<jsp:useBean id="obj" scope="application" class="ankit.LoginBean" /> 
<jsp:setProperty name="obj" property="myemail" /> 
<jsp:setProperty name="obj" property="mypassword" /> 
<% 
myemail=request.getParameter("myemail"); 
mypassword=request.getParameter("mypassword"); 

try{ 
    b=obj.checkLogin(myemail,mypassword); 
    System.out.println(b); 
if(b) 
{ 
userName=obj.checkUserName(); 
userType=obj.checkUserType(); 
System.out.println(userName); 
session.setAttribute("loggedUserName",userName); 
session.setAttribute("loggedUserType",userType); 
response.sendRedirect("http://localhost:8080/vt/index.jsp"); 
} 
else 
{ 
out.println("Wrong User Name and Password"); 
} 
}catch(Exception e) 
{ 
out.println("Wrong User Name and Password"); 
e.printStackTrace(); 
} 

%> 
+0

на самом деле пересмотрено: это из-за scope = "application" – Joeblade

ответ

2

Вы определяете bean с именем "obj" как scope = "application" это означает, что он доступен по всему миру.

взгляните на различные области применения (страница, запрос, сеанс, приложение) и используйте их соответствующим образом. В этом случае вы также можете избежать проблемы, используя разные имена для объектов. (вместо обоих «obj»).

При запуске программы объект хранится под именем «obj» в области приложения (как статическая переменная), а затем в другом jsp вы пытаетесь передать его другому типу. (useBean создает bean-компонент, когда нет имени под именем, или использует компонент, найденный на месте, когда он есть).

так что в принципе: переключитесь на запрос области, если вам нужен только объект в течение всего вашего запроса. , если вам нужны оба для области сеанса/приложения, вам придется использовать разные имена.

также: никогда не используйте общие имена, такие как obj и прочее. назовите его после того, что он представляет на самом деле, или функции, которую он заполняет.

+0

спасибо тонну. обязательно внесут соответствующие изменения. –

Смежные вопросы