2012-10-02 55 views
13

Resumir la respuesta que se muestra aquí Code assist in (jsp /jstl) view for Spring MVC model objects in Eclipse no funciona para nada, ¿hay alguna configuración que deba cambiar?intellij no resuelve las variables dentro de la inspección de código JSP o autocompletar

Acabo de descargar la muestra spring-mvc-showcase en github, y no funciona de la caja en ese proyecto (con la versión 11.1.3 o EAP 12 ambas ediciones empresariales completas), ver más abajo (No tengo idea donde se pone de FormBean):

fruit and foo, both work, but not available as autocomplete options

Aquí está un ejemplo de mi propio proyecto, la siguiente captura de pantalla (marco inferior) muestra mi controlador de la adición de un atributo de cadena de modelar y regresar correcta visualización de nombres. Entonces yo espero shopString que se ofrecerá como opción de autocompletar durante la edición de ese punto de vista, sin embargo no lo es: JSP shown abover controller, the autocomplete offered up when "s" typed

sg es una variable javascript - tan grande que debe estar allí, pero ¿dónde está "shopString"?. ¿Hay alguna configuración que necesite cambiar u otra cosa que me falta para obtener esta funcionalidad (utilizando 11.1.3 enterprise edition con todos los plugins Spring).

También está fallando en la primavera de variables específicas: enter image description here

es su fuente abierta (? Uno de los proyectos de tutoría de primavera) donde esto definitivamente las obras ... o hay un entorno que necesito cambiar en mi Intellij install (¿He probado con una nueva versión de la versión 12 EAP)?

Uno más captura de pantalla muestra todos los archivos de mi coifg resorte configurado correctamente a través de la detección automática, pero las inspecciones de código falla ... este es el proyecto spring-mvc-showcase: code inspection and spring config

+0

IntelliJ es lo suficientemente inteligente como para reconocer y resolver las variables. Si no puede encontrar algo, significa que no los puso en el lugar correcto o no le dijo a IntelliJ dónde están. – duffymo

+0

@duffymo es una variable de primavera, compila bien y funciona como se esperaba. Lo único que falla es la inspección. Estoy tratando de averiguar cuál es el "lugar correcto", ya que todo se compila y funciona a la perfección; las únicas fallas que obtengo están en las inspecciones. – NimChimpsky

+0

¿Qué versión de IntelliJ? 10 u 11, ¿comunidad o empresa? – duffymo

Respuesta

22

Hay una forma estándar de hacerlo, que no es específica de IntelliJ.

<jsp:useBean id="someModel" scope="request" type="foo.bar.SomeModelClass"/> 

El tipo de atributoaquí no tiene por qué ser una clase concreta, puede ser un tipo de interfaz también. Normalmente, pondría estas declaraciones al comienzo de sus archivos JSP/JSPX, para proporcionar algo así como una "declaración de entradas modelo".

Se recomendó el uso de JSP de una manera tan declarativa en el libro original de Spring, de hecho (Diseño y desarrollo Expert One-on J2EE.). IntelliJ ha proporcionado la finalización completa del código para tales páginas desde hace al menos 7 años.

Tenga en cuenta que existen características de comodidad adicional pertinente con IntelliJ: si una referencia variable EL está marcado como indefinido, puede pulsar Alt-Intro para seleccionar un Quickfix, que se inserte una declaración como la de arriba. Incluso intentará averiguar el tipo real, en función de las propiedades a las que está accediendo.

+1

Gracias, pero la etiqueta useBean también ejemplifica el bean que es innecesario: http://stackoverflow.com/a/1855580/106261 pero sí, luego habilita las características que me faltaban. – NimChimpsky

+4

No crea nada al usar _type_. Para eso es el atributo _class_. –

+0

oh ok, gracias, de esta manera puede ser mejor – NimChimpsky

11

Según entiendo la primavera, no hay ninguna declaración en el caso definiciones de variables que puede poner en su modelo. La llamada model.addAttribute() puede agregar un objeto al modelo, ya sea identificado por un parámetro o generado automáticamente por el nombre de clase del objeto.

así que imagina el siguiente caso en el que usted tiene más de un método:

@RequestMapping("foo") public String foo(Model model) { 
    model.addAttribute("model", new Foo()); 
    return new Random().nextBoolean() ? "page" : "someOtherPage"; 
} 
@RequestMapping("bar") public String bar(Model model) { 
    model.addAttribute("model", new Bar()); 
    model.addAttribute("model", new Foo()); 
    model.addAttribute("model", new Bar()); 
    return new Random().nextBoolean() ? "page" : "someOtherPage"; 
} 

y la JSP sería algo así como

<c:out ${model.value} /> 

Dado que no hay ninguna asignación adecuada de los cuales los controladores pueden, en algunos Las circunstancias a las que se dirigen las vistas, o lo que se encuentra exactamente dentro del modelo, su IDE no tiene ninguna posibilidad real de proporcionarle la información adecuada.

Pero para ayudar al IDE a sugerirle cierta información útil, puede usar sugerencias de tipo. Por lo tanto, debe copiar la referencia completa de un objeto, e. gramo. foo y añadir un comentario JSP como:

<%[email protected] id="foo" type="com.mycompany.SomeObject"--%> 

La advertencia se desvanecerá y el apoyo IDE completo está de su lado, lo que le permite travesía los campos defoo. Una de las mejores cosas es que las advertencias getter desaparecerán también.Puede llamar directamente al mostrar los usos acción directamente desde el JSP o POJO.

Esto también funciona con JSF y particularmente dentro de los componentes JSF. Una característica bastante clara para tener este tipo de código completado, mostrando advertencias y errores.

Espero que lo ayude con su cambio a Intellij Idea.

Edit: También informé de este hallazgo a un amigo wo lo envolvió todo en una bonita entrada de blog. Quizás esté interesado en leerlo: open link

+0

Ok, así que necesitaba agregar una línea <% - @ elvariable id = "foo" type = "com.mycompany.SomeObject" -%>. Todavía creo que debería ser posible hacerlo automáticamente, en el caso de la esquina que describió podría poner a disposición de "la página" y "alguna otra página" dos opciones para el "modelo" variable. Cada opción tendría un tipo diferente: foo y barra. – NimChimpsky

+0

De hecho, leí ese blog y publiqué un comentario. Supuse incorrectamente que había una forma de hacerlo funcionar sin el comentario específico adicional de intellij. Bounty en camino ... – NimChimpsky

0

me encontré con problema similar al empezar a escribir mi propio interceptor. El problema era que yo comienzo a usar refference en mi opinión, la configuración de resolución de xml issue

no utilice contrucción como esto

<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" ref="prefix"/> 
    <property name="suffix" ref="suffix"/> 
</bean>- 
Cuestiones relacionadas