2010-02-09 5 views
9

Пожалуйста, не ударяйте меня в лицо! Я знаю, что это летит перед хорошим дизайном, но я просто пишу тестовую страницу, чтобы продемонстрировать что-то. Наш модуль webapp (правильно) не имеет прямого доступа к нашим классам домена. Я не хочу создавать целый класс за пределами JSP, так как страница предназначена только для демонстрационных целей, и я не хочу писать много постороннего кода по той же причине. Я пытался определить класс обычным способом в JSP, но это не сработало (много ошибок компиляции). Это быстро-грязная, разовая сделка (я избавлюсь от нее, как только закончу). Я просто хотел бы знать, возможно ли это или нет. Если нет, тогда я пройду долгий путь.Определение класса в JSP

<% 

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

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

} 
%> 

И ошибки я получил:

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

без исходного кода, то * не знает * то, что вы не могли бы сделать неправильно. –

ответ

19

Я не понимаю, почему это не было бы возможным. JSP - это еще один способ написания сервлета, поэтому вы должны иметь возможность создавать классы как статические (или, если на то пошло, нестатические) внутренние классы в Servlet, как и любой другой класс, используя <%! %> конвенция.

Я был в состоянии сделать быстрое, функциональное, доказательство концепции:

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

«статический» класс - лучшая идея здесь, ИМО. +1 –

+0

Ahh, я вижу, что я сделал не так - восклицательный знак. Спасибо! @Vinegar, да 'static' кажется лучшим вариантом. Благодаря! –

+0

Damit, я не могу использовать%><% внутри <%! %>. Это нормально? –

8

Просто для информации: фрагмент кода от вопроса объявляет вложенной классу (то есть класс, объявленный внутри тела методы). Было бы законным без public ключевого слова:

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

О, спасибо за эту информацию! –