2010-02-09 58 views
9

Xin đừng đấm vào mặt tôi! Tôi biết điều này bay khi đối mặt với thiết kế tốt, nhưng tôi chỉ đơn giản là viết một trang thử nghiệm để chứng minh điều gì đó. Mô-đun webapp của chúng tôi (chính xác) không có quyền truy cập trực tiếp vào các lớp miền của chúng tôi. Tôi không muốn tạo ra một lớp học toàn bộ bên ngoài của JSP, vì trang chỉ dành cho mục đích trình diễn, và tôi không muốn viết nhiều mã không liên quan cho cùng một lý do. Tôi đã cố gắng để xác định một lớp theo cách thông thường trong JSP, nhưng điều đó không làm việc (đã ném rất nhiều lỗi biên dịch). Đây là một thỏa thuận một lần, nhanh chóng, bẩn thỉu (tôi sẽ loại bỏ nó một khi tôi đã hoàn thành). Tôi chỉ muốn biết nếu điều này là có thể hay không. Nếu không, thì tôi sẽ đi đường dài.Xác định một lớp học trong một JSP

<% 

public class Person { 
    private int id; 
    private int age; 
    private String name; 

    /* 
     ... ctor and getters and setters 
    */ 

} 
%> 

Và các lỗi tôi nhận:

convert-jsp-to-java: 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 

An error occurred at line: 57 in the generated java file 
Syntax error on token "class", invalid VariableDeclarator 

An error occurred at line: 73 in the generated java file 
The return type is incompatible with Object.getClass() 

An error occurred at line: 74 in the generated java file 
Syntax error on token "class", Identifier expected 

An error occurred at line: 77 in the generated java file 
Syntax error on token "class", invalid VariableDeclaratorId 

An error occurred at line: 78 in the generated java file 
Syntax error on token "this", PrimitiveType expected 

An error occurred at line: 78 in the generated java file 
Syntax error on token "class", invalid Expression 

An error occurred at line: 79 in the generated java file 
Syntax error on token "class", invalid Expression 
+0

Nếu không có mã nguồn, không có * cho biết bạn có thể làm gì sai. –

Trả lời

19

Tôi không thấy lý do tại sao nó sẽ không thực hiện được. Một JSP chỉ là một cách viết một Servlet, vì vậy bạn có thể tạo các lớp là các lớp bên trong tĩnh (hoặc cho rằng, không tĩnh) bên trong Servlet, giống như bất kỳ lớp nào khác, sử dụng <%! %> quy ước.

tôi đã có thể làm một cách nhanh chóng, chức năng, bằng chứng của khái niệm:

<%@page contentType="text/html" pageEncoding="MacRoman"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
<%! 
private static class NdBadIdea { 
    private final int foo = 42; 

    public int getFoo() { 
    return foo; 
    } 
} 
%> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=MacRoman"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <h1>Hello World!</h1> 
     <%=new NdBadIdea().getFoo()%> 
    </body> 
</html> 
+1

Lớp 'tĩnh' là một ý tưởng hay hơn ở đây, IMO. +1 –

+0

Ahh, tôi thấy những gì tôi đã làm sai - không có dấu chấm than. Cảm ơn bạn! @Vinegar, có 'static' dường như là một lựa chọn tốt hơn. Cảm ơn! –

+0

Thiệt hại, tôi không thể sử dụng%><% bên trong <%! %>. Điều này có bình thường không? –

8

Chỉ cần cung cấp thông tin: Mã đoạn từ câu hỏi khai báo một lồng lớp (tức là một lớp học, tuyên bố bên trong một cơ thể phương pháp). Sẽ là hợp pháp nếu không có public từ khóa:

<%  
    class Person { 
     ... 
    } 
%> 
+0

Ồ, cảm ơn chút thông tin đó! –

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