2010-02-09 16 views
9

Lütfen beni yüzüne yumruklama! Bu sinekleri iyi tasarım karşısında biliyorum, ama bir şey göstermek için sadece bir test sayfası yazıyorum. Webapp modülümüzün (doğru) alan sınıflarımıza doğrudan erişimi yoktur. Sayfa sadece gösterim amaçlı olduğu için JSP dışında bir sınıf oluşturmak istemiyorum ve aynı nedenden ötürü çok fazla yabancı kod yazmak istemiyorum. JSP'de olağan bir şekilde bir sınıf tanımlamaya çalışıyordum ama bu işe yaramadı (çok fazla derleme zamanı hatası attı). Bu hızlı-kirli, tek seferlik bir anlaşmadır (işim bittikten sonra kurtulacağım). Bunun mümkün olup olmadığını bilmek istiyorum. Eğer değilse, o zaman uzun yoldan gideceğim.JSP'de bir sınıf tanımlama

<% 

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

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

} 
%> 

Ve hatalar aldım:

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

vardır. –

cevap

19

mümkün olmazdı neden görmüyorum. Bir JSP, bir Servlet yazmanın sadece bir başka yoludur, bu nedenle, <% kullanarak herhangi bir başka sınıfta olduğu gibi, Servlet içinde statik (veya statik olmayan) iç sınıflar olarak sınıflar oluşturabilmeniz gerekir! %> sözleşme.

Sadece bilgi için
<%@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

'Statik 'sınıfı burada daha iyi bir fikir IMO. +1 –

+0

Ahh, neyi yanlış yaptığımı görüyorum - ünlem işareti yok. Teşekkür ederim! @Vinegar, evet 'statik' daha iyi bir seçenek gibi görünüyor. Teşekkürler! –

+0

Damit,%><% <%! %> içinde kullanamıyorum. Bu normal mi? –

8

: kodundan sorusundan pasajı bir yöntemdir vücudun içinde bildirilen bir iç içe sınıf (yani bir sınıf, beyan

Ben kavramının hızlı, fonksiyonel, kanıt yapmak başardı). Bu public anahtar kelime olmadan yasal olacaktır: kimse bilemez * yanlış ne yapmış olabileceğimi * kaynak kodu olmadan

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

Oh, bu bilgi için teşekkürler! –