【问题标题】:Defining a class in a JSP在 JSP 中定义一个类
【发布时间】:2010-02-09 01:45:40
【问题描述】:

请不要打我的脸!我知道这与优秀的设计背道而驰,但我只是在编写一个测试页面来展示一些东西。我们的 webapp 模块(正确)无法直接访问我们的域类。我不想在 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

【问题讨论】:

  • 没有源代码,就不知道你可能做错了什么。

标签: java jsp class


【解决方案1】:

我不明白为什么这是不可能的。 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>

【讨论】:

  • static class 是一个更好的主意,IMO。 +1
  • 啊,我明白我做错了什么——没有感叹号。谢谢! @Vinegar,是的 static 似乎是一个更好的选择。谢谢!
  • 该死,我不能在 。这正常吗?
  • @VivinPaliath 如果没有感叹号,您的代码将进入方法主体,因此您无法将其公开。您可以删除“public”,代码也可以正常工作,没有感叹号。
【解决方案2】:

仅供参考:问题中的代码 sn-p 声明了一个嵌套类(即,在方法主体内声明的类)。没有public关键字也是合法的:

<%      
    class Person { 
        ...
    }
%>

【讨论】:

    猜你喜欢
    • 2014-11-16
    • 2014-12-31
    • 2013-03-18
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    相关资源
    最近更新 更多