2010-06-11 33 views
9
org.apache.jasper.JasperException: /index.jsp(1,1) The value for the useBean class attribute com.b5 is invalid. 
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40) 
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407) 
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148) 
    org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1272) 
    org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1178) 
    org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361) 
    org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411) 
    org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2417) 
    org.apache.jasper.compiler.Node$Root.accept(Node.java:495) 
    org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361) 
    org.apache.jasper.compiler.Generator.generate(Generator.java:3426) 
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:216) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:332) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:312) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:299) 
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

Bất kỳ ai có thể giải thích nguyên nhân và giải pháp của vấn đề này không?JasperException: Giá trị cho thuộc tính lớp useBean không hợp lệ

+0

bạn có thể đăng mã gây ra lỗi này không? – gruntled

Trả lời

11
 
The value for the useBean class attribute com.b5 is invalid. 

Vì vậy, bạn có một

<jsp:useBean id="b5" class="com.b5" /> 

ngoại lệ này là điển hình khi sau xảy ra "đằng sau hậu trường" thất bại:

com.b5 b5 = new com.b5(); 

Ngoài các yêu cầu rằng nó nên được đặt bên trong một gói (do đó bạn đã làm đúng cách), bean phải là một lớp public và có một hàm tạo (không rõ ràng) public no-arg. I E.

package com; 

public class b5 { 
    public b5() { 
     // Default constructor. 
    } 
} 

Thông thường người xây dựng này đã có mặt, nhưng điều này sẽ bị ẩn bất cứ khi nào bạn thêm các nhà thầu khác tham gia các đối số khác. Sau đó, bạn sẽ cần phải tự thêm nó một cách rõ ràng.

Một nguyên nhân khác có thể là lớp bean không thể tìm thấy trong đường dẫn lớp thời gian chạy. Nếu đây là bean của riêng bạn, hãy đảm bảo rằng tệp class của nó nằm ở /WEB-INF/classes/com/b5.class. Ngoài ra, hãy đảm bảo rằng tên đầy đủ đủ điều kiện com.b5 đúng là đúng, phân biệt chữ hoa chữ thường.

Bạn nên nhìn thêm một chút trong ngăn xếp để biết nguyên nhân chính xác của sự cố. Đi đến các phần root cause hoặc caused by ở cuối dấu vết.


Điều đó nói (và không liên quan đến vấn đề thực tế), tên lớp b5 là lựa chọn khá kém. Tên phải là một tên hợp lý bắt đầu bằng chữ hoa, ví dụ: User, Product, Order, v.v.

+0

Xin chào! Tôi có cùng một vấn đề, nhưng 'lớp' của tôi không nằm trong thư mục 'WEB-INF'. Tuy nhiên, tôi không muốn thay đổi vị trí thư mục lớp học của mình. Bạn có biết bất kỳ cách nào để biên dịch trước các tập tin jsp có một vị trí khác nhau cho các lớp dir? –

1

Tôi vừa gặp vấn đề tương tự. Ngoài những điều trên, hãy đảm bảo rằng bạn đã nhớ đặt chính lớp của mình thành "công khai"

0

Tôi đã gặp sự cố tương tự và được đánh dấu ở trên, tôi quên thêm hàm tạo mặc định như tôi đã thêm một ghi đè.

java cơ bản, trình biên dịch thêm một hàm tạo không có mặc định vào mỗi lớp bạn tạo, ngoại trừ khi bạn thêm một hàm tạo một cách rõ ràng.

1

thay vì
<jsp:useBean id="b5" class="com.b5" />
sử dụng
<jsp:useBean id='b5'>
<jsp:attribute name="class" trim="true">com.b5</jsp:attribute>
</jsp:useBean>

cũng khởi động lại máy chủ tomcat sau khi thay đổi

4

Hãy thử loại thay vì lớp

Sự khác biệt theo các tài liệu:

class = "package.class" type = "package.class" Tạo một hạt từ lớp có tên trong lớp và chỉ định loại dữ liệu bạn chỉ định theo loại.Giá trị của kiểu có thể giống như lớp, một lớp cha của lớp, hoặc một giao diện được thực hiện bởi lớp. Lớp bạn chỉ định trong lớp không được trừu tượng và phải có hàm tạo công khai, không đối số. Tên gói và lớp bạn sử dụng với cả lớp và loại đều phân biệt chữ hoa chữ thường. beanName = "{package.class |}" type = "package.class" Tạo một hạt từ một lớp, một mẫu được tuần tự hóa hoặc một biểu thức đánh giá thành một lớp hoặc mẫu được tuần tự hóa. Khi bạn sử dụng beanName, bean được khởi tạo bằng phương thức java.beans.Beans.instantiate. Phương thức Beans.instantiate kiểm tra xem gói và lớp bạn chỉ định đại diện cho một lớp hay một mẫu được tuần tự hóa. Nếu chúng đại diện cho một mẫu được tuần tự hóa, Beans.instantiate đọc dạng tuần tự (có tên giống như package.class.ser) bằng cách sử dụng trình nạp lớp. Giá trị của kiểu có thể giống như beanName, một superclass của beanName, hoặc một giao diện được thực hiện bởi beanName. Tên gói và lớp mà bạn sử dụng với cả beanName và type đều phân biệt chữ hoa chữ thường.
0

Không gian làm việc của bạn có lớp cần sử dụngBean, vì vậy trong khi làm việc, nó sẽ không ném bất kỳ thông báo lỗi nào. Nhưng khi bạn triển khai ứng dụng nó đã triển khai theo tệp deploy.properties.Đó có thể là lớp của bạn mà bạn đã sử dụng trong useBean không được triển khai. Kiểm tra tệp deploy.properties của bạn.Hy vọng nó sẽ hoạt động !!

Các vấn đề liên quan