2010-02-09 19 views
9

¡Por favor, no me golpees en la cara! Sé que esto va en contra de un buen diseño, pero simplemente estoy escribiendo una página de prueba para demostrar algo. Nuestro módulo webapp (correctamente) no tiene acceso directo a nuestras clases de dominio. No quiero crear una clase completa fuera del JSP, ya que la página es solo para fines de demostración, y no quiero escribir muchos códigos extraños por el mismo motivo. Estaba tratando de definir una clase de la manera habitual en el JSP, pero eso no funcionó (lanzó un montón de errores en tiempo de compilación). Este es un trato rápido y sucio, de una sola vez (me desharé de él una vez que haya terminado). Me gustaría saber si esto es posible o no. Si no, voy a recorrer el largo camino.Definir una clase en un JSP

<% 

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

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

} 
%> 

y los errores que tengo:

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

Sin código fuente, no es imposible saber * * lo que podría haber hecho mal. –

Respuesta

19

no veo por qué no sería posible. Una JSP es simplemente otra forma de escribir un servlet, por lo que debería poder crear clases como clases internas estáticas (o para el caso, no estáticas) dentro del servlet, como lo haría con cualquier otra clase, ¡usando el <%! %> convención.

que era capaz de hacer una rápida y funcional, prueba de concepto:

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

clase 'estática' es una mejor idea aquí, IMO. +1 –

+0

Ahh, veo lo que hice mal, sin signos de admiración. ¡Gracias! @Vinegar, sí 'estático' parece una mejor opción. ¡Gracias! –

+0

Damit, no puedo usar%><% dentro de <%! %>. ¿Esto es normal? –

8

Sólo para información: fragmento de código de la cuestión declara un clase anidada (es decir, una clase, declarada dentro de un cuerpo de método) Sería legal sin public palabra clave:

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

¡Oh, gracias por esa información! –

Cuestiones relacionadas