我有一个查询..
<jsp:useBean id="result" class="MyPack.abc" scope="session"></jsp:useBean>
的帮助下在jsp中获取此值但是<jsp:useBean>
显示异常CastException(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>
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无法强制转换为类)。
答案 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。这很好用。
一些有用的链接: