Определение класса в JSP

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

<%

 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
9
задан Vivin Paliath 9 February 2010 в 02:10
поделиться

2 ответа

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

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

<%@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>
21
ответ дан 4 December 2019 в 07:35
поделиться

Для информации: фрагмент кода из вопроса объявляет вложенный класс (т.е. класс, объявленный внутри тела метода). Это было бы законно без public keyword:

<%      
    class Person { 
        ...
    }
%>
8
ответ дан 4 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: