2010-02-09 16 views
9

Proszę, nie walnij mnie w twarz! Wiem, że to leci w obliczu dobrego projektu, ale po prostu piszę stronę testową, żeby coś zademonstrować. Nasz moduł webapp (poprawnie) nie ma bezpośredniego dostępu do naszych klas domen. Nie chcę tworzyć całej klasy poza stronami JSP, ponieważ strona służy wyłącznie do celów demonstracyjnych i nie chcę pisać zbyt wielu nieistniejących kodów z tego samego powodu. Próbowałem zdefiniować klasę w zwykły sposób na stronie JSP, ale to nie zadziałało (spowodowało wiele błędów podczas kompilacji). To jest szybka, brudna, jednorazowa umowa (pozbędę się jej, gdy skończę). Chciałbym tylko wiedzieć, czy to możliwe, czy nie. Jeśli nie, to pójdę długą drogą.Definiowanie klasy w JSP

<% 

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

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

} 
%> 

a błędy mam:

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

bez kodu źródłowego, nie ma * * Nie wiadomo, co może zrobić źle. –

Odpowiedz

19

nie widzę dlaczego nie byłoby to możliwe. JSP jest tylko innym sposobem pisania Servletu, więc powinieneś być w stanie tworzyć klasy jako statyczne (lub w tym przypadku niestatyczne) wewnętrzne klasy w Servletie, tak jak w każdej innej klasie, używając <%! %> konwencja.

udało mi się zrobić szybki, funkcjonalny, dowód pojęcia:

<%@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

"Statyczna" klasa jest tu lepszym pomysłem, IMO. +1 –

+0

Ahh, widzę, co zrobiłem źle - bez wykrzyknika. Dziękuję Ci! @Vinegar, tak 'static' wydaje się lepszym rozwiązaniem. Dzięki! –

+0

Damit, nie mogę użyć%><% wewnątrz <%! %>. Czy to normalne? –

8

Tylko dla informacji: fragment kodu z pytaniem deklaruje zagnieżdżone klasy (tj klasę zadeklarowanej wewnątrz ciała metoda). Byłoby prawny bez public słowa kluczowego:

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

Oh, dzięki za tę odrobinę informacji! –

Powiązane problemy