2012-10-02 15 views
13

di riassumere la risposta qui Code assist in (jsp /jstl) view for Spring MVC model objects in Eclipse non funziona per me a tutti dimostrato, è ci una regolazione che ho bisogno di cambiare?IntelliJ non risolvono le variabili el all'interno di ispezione del codice JSP o di completamento automatico

Ho appena scaricato il campione spring-mvc-showcase su GitHub, e non funziona out of the box su quel progetto (sia con 11.1.3 o EAP 12 versione entrambe le edizioni Enterprise completa), vedere di seguito (non ho idea dove si arriva FormBean da):

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

Ecco un esempio dalla mia progetto, alla schermata di seguito (riquadro inferiore) mostra mio controller aggiungendo un attributo di stringa di modellare e il ritorno al nome della vista. Vorrei quindi aspetto shopString da offrire come opzione di completamento automatico quando si modifica questo punto di vista, tuttavia non è: JSP shown abover controller, the autocomplete offered up when "s" typed

sg è una variabile javascript - così grande che dovrebbe essere lì, ma dove è "shopString"?. C'è un'impostazione che ho bisogno di cambiare o qualcos'altro che mi manca per ottenere questa funzionalità (usando l'edizione aziendale 11.1.3 con tutti i plugin di primavera).

E 'anche venendo a mancare in primavera variabili specifiche: enter image description here

è il loro un open source (? Uno dei progetti tutorial molla) in cui questo funziona sicuramente ... o c'è un ambiente ho bisogno di cambiare nella mia Installazione di Intellij (l'ho provato con un nuovo download della versione 12 EAP)?

Ancora una schermata qui sotto mostra tutti i miei file coifg primavera impostato correttamente tramite rilevamento automatico, ma i controlli di codice fallisce ... questo è il progetto spring-mvc-showcase: code inspection and spring config

+0

IntelliJ è abbastanza intelligente da riconoscere e risolvere le variabili. Se non riesce a trovare qualcosa, significa che non li hai messi nel posto giusto o che hai omesso di dire a IntelliJ dove si trovano. – duffymo

+0

@duffymo è una variabile di primavera, compila bene e funziona come previsto. L'unica cosa che fallisce è l'ispezione. Sto cercando di scoprire qual è il "posto giusto", dato che tutto si compila e funziona perfettamente; gli unici errori che ottengo sono nelle ispezioni. – NimChimpsky

+0

Quale versione di IntelliJ? 10 o 11, comunità o impresa? – duffymo

risposta

22

C'è un modo standard per farlo, che non è specifico di IntelliJ.

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

L'attributo tipo qui non ha bisogno di essere una classe concreta, può essere un tipo di interfaccia pure. Normalmente inseriresti queste dichiarazioni all'inizio dei tuoi file JSP/JSPX, per fornire qualcosa come una "dichiarazione di input di modello".

Utilizzando JSP in modo così dichiarativa è stato raccomandato nel libro originale su Spring, infatti (Expert One-on-One J2EE progettazione e sviluppo.). IntelliJ ha fornito il completamento completo del codice per tali pagine da almeno 7 anni.

noti che ci sono ulteriori caratteristiche di convenienza rilevanti in IntelliJ: se un riferimento variabile EL è contrassegnato come non definita, è possibile premere Alt-Enter per selezionare un QuickFix, che inserirà una dichiarazione come sopra. Proverà anche a capire il tipo effettivo, in base alle proprietà a cui si sta accedendo.

+1

Grazie, ma il tag useBean istanzia anche il bean che non è necessario: http://stackoverflow.com/a/1855580/106261 ma sì, allora abilita le funzionalità che mi mancavano. – NimChimpsky

+4

Non crea un'istanza di nulla quando si utilizza _type_. Ecco a cosa serve l'attributo _class_. –

+0

oh ok, grazie, potrebbe essere meglio – NimChimpsky

11

Mi pare di capire primavera, non v'è alcuna dichiarazione per definizioni di variabili che puoi inserire nel tuo modello. La chiamata model.addAttribute() può aggiungere un oggetto al modello, identificato da un parametro o generato automaticamente dal nome della classe dell'oggetto.

quindi immaginare il seguente caso in cui si dispone di più di un metodo:

@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"; 
} 

e JSP sarebbe qualcosa di simile

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

Poiché non v'è la mappatura corretta dei quali controllori non può in alcuni circostanze in cui le opinioni, né cosa esattamente si trova all'interno del modello, il tuo IDE non ha alcuna possibilità di fornire informazioni corrette.

Ma per sostenere l'IDE in voi suggerendo alcune informazioni utili, è possibile utilizzare tipo suggerimenti. Pertanto, devi copiare l'intero riferimento di un oggetto, e. g. foo e aggiungere un commento JSP come:

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

L'avviso spariranno e il pieno supporto IDE è dalla vostra parte, che consente di traverso i campi di foo. Una delle cose più belle è che gli avvertimenti getter inutilizzati svaniranno, anche.È possibile chiamare direttamente l'azione per visualizzare l'azione direttamente dal JSP o dal POJO.

Questo funziona anche con JSF e in particolare all'interno dei componenti JSF. Funzionalità molto carina per avere questo tipo di completamento del codice, mostrando avvertimenti ed errori.

La speranza che ti aiuta con il passaggio a Intellij Idea.

Modifica: Ho anche segnalato questo risultato a un amico che ha avvolto l'intera cosa in un bel post di blog. Forse sei interessato a leggerlo: open link

+0

Ok quindi ho bisogno di aggiungere una riga <% - @ elvariable id = "foo" type = "com.mycompany.SomeObject" -%>. Penso ancora che sia possibile farlo automaticamente, nel caso in cui hai delineato potresti rendere disponibili solo "page" e "someOtherPage" due opzioni per il "modello" variabile ogni opzione avrebbe un tipo diverso: foo e bar. – NimChimpsky

+0

In realtà ho letto quel blog e postato un commento, ho erroneamente pensato che esistesse un modo per farlo funzionare senza il commento specifico intellij aggiunto. Bounty sulla sua strada ... – NimChimpsky

0

ho affrontato con problema simile quando iniziare a scrivere il mio intercettore. Il problema era che io iniziare a utilizzare refference nella mia configurazione resolver vista xml issue

non utilizzare contruction come questo

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