2012-10-02 4 views
13

Auflösung um die Antwort hier Code assist in (jsp /jstl) view for Spring MVC model objects in Eclipse funktioniert nicht für mich überhaupt, gibt es eine Einstellung, die ich ändern muss?intellij nicht El Variablen innerhalb JSP-Code-Inspektion oder Autocomplete

Ich habe gerade das Beispiel spring-mvc-showcase auf github heruntergeladen, und es funktioniert nicht out of the box auf diesem Projekt (entweder 11.1.3 oder EAP 12 Version beide volle Enterprise-Editionen), siehe unten (Ich habe keine Ahnung wo es nur geht FormBean von):

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

Hier ein Beispiel aus meinem eigenen Projekt, unter dem Screenshot (Bodenrahmen) zeigt mein Controller ein String Attribut Hinzufügen zu modellieren und korrekte Ansicht Namen zurück. Ich würde dann erwarten shopString wie die automatische Vervollständigung Option angeboten werden, wenn diese Ansicht bearbeiten, aber es ist nicht: JSP shown abover controller, the autocomplete offered up when "s" typed

sg ist ein JavaScript-Variable - so groß, es sollte dort sein, aber wo ist „shopString?“. Gibt es eine Einstellung, die ich ändern muss oder etwas anderes, das ich vermisse, um diese Funktionalität zu erhalten (unter Verwendung von 11.1.3 Enterprise Edition mit allen Spring Plugins).

Es wird auch auf die Feder versagt spezifischen Variablen: enter image description here

ist ihr ein Open-Source (? Eine der Feder Tutorial-Projekte), wo dies auf jeden Fall funktioniert ... oder gibt es eine Einstellung, die ich in meinem ändern müssen Intellij installieren (Ich habe mit einem brandneuen Download der Version 12 EAP getestet)?

Ein weiterer Screenshot unten zeigt alle meine Feder coifg Dateien einrichten nicht ordnungsgemäß über die automatische Erkennung, aber die Code-Inspektionen ... das ist das spring-mvc-showcase Projekt: code inspection and spring config

+0

IntelliJ ist intelligent genug, um Variablen zu erkennen und zu beheben verwenden Sie. Wenn es etwas nicht finden kann, bedeutet das, dass Sie es nicht an den richtigen Ort gebracht haben oder Sie haben IntelliJ nicht gesagt, wo sie sind. – duffymo

+0

@duffymo es ist eine Feder Variable, es kompiliert gut und funktioniert wie erwartet. Das einzige, was scheitert, ist die Inspektion. Ich versuche herauszufinden, was der "richtige Ort" ist, da alles kompiliert und perfekt läuft; Die einzigen Fehler, die ich bekomme, sind die Inspektionen. – NimChimpsky

+0

Welche Version von IntelliJ? 10 oder 11, Gemeinschaft oder Unternehmen? – duffymo

Antwort

22

Es gibt einen Standard Weg, dies zu tun, der nicht IntelliJ-spezifisch ist.

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

Das Typ Attribut hier nicht eine konkrete Klasse sein muss, kann es ein Interface-Typ als gut. Normalerweise würden Sie diese Deklarationen am Anfang Ihrer JSP/JSPX-Dateien ablegen, um so etwas wie eine "Deklaration von Modelleingaben" bereitzustellen.

Die Verwendung von JSPs in einer solchen deklarativen Art und Weise wurde im ursprünglichen Buch über Spring, in der Tat empfohlen (Expert One-on-One J2EE Design und Entwicklung.). IntelliJ bietet seit mindestens 7 Jahren vollständige Code-Vervollständigung für diese Seiten an. Beachten Sie, dass es zusätzliche relevante Komfortfunktionen in IntelliJ gibt: Wenn eine EL-Variablenreferenz als nicht definiert markiert ist, können Sie Alt-Enter drücken, um eine QuickFix auszuwählen, die eine Deklaration wie oben einfügen wird. Es wird sogar versuchen, basierend auf den Eigenschaften, auf die Sie zugreifen, den tatsächlichen Typ herauszufinden.

+1

Danke, aber das useBean-Tag instanziiert auch die Bean, die unnötig ist: http://StackOverflow.com/a/1855580/106261 aber ja, es aktiviert dann die Features, die mir fehlten. – NimChimpsky

+4

Bei der Verwendung von _type_ wird nichts instanziiert. Dafür ist das Attribut _class_ bestimmt. –

+0

oh ok, danke, dieser Weg könnte besser sein – NimChimpsky

11

Wie ich Frühling verstehen, gibt es keine Erklärung für Definitionen von Variablen, die Sie in Ihr Modell einfügen können. Der Aufruf model.addAttribute() kann dem Modell ein Objekt hinzufügen, das entweder durch einen Parameter identifiziert wird oder automatisch durch den Klassennamen des Objekts generiert wird.

vorstellen, also den folgenden Fall, in dem Sie mehr als eine Methode haben:

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

und die JSP wäre so etwas wie

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

werden, da es keine richtige Zuordnung ist von dem Controller unter einigen kann Umstände, die zu den Ansichten führen, noch was genau innerhalb des Modells liegt, hat Ihre IDE keine echte Chance, Sie mit den richtigen Informationen zu versorgen.

Um die IDE zu unterstützen, indem Sie nützliche Informationen vorschlagen, können Sie Typhinweise verwenden. Daher müssen Sie die gesamte Referenz eines Objekts kopieren, z. G. foo und fügen Sie einen JSP-Kommentar wie:

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

Die Warnung wird verschwinden und die volle IDE-Unterstützung ist auf Ihrer Seite, so dass Sie Querungs die Felder von foo. Eines der nettesten Dinge ist, dass die unbenutzten Getter Warnungen auch verschwinden werden.Sie können die Aktion show usages direkt von der JSP oder dem POJO aufrufen.

Dies funktioniert auch mit JSF und insbesondere innerhalb von JSF-Komponenten. Ziemlich nette Eigenschaft, um diese Art von Code-Vervollständigung zu haben, Warnungen und Fehler zeigend.

Hoffe, dass Sie mit Ihrem Wechsel zu Intellij Idea hilft.

Edit: Ich berichtete dieses Ergebnis auch an einen Freund, der das Ganze in einen schönen Blogeintrag eingewickelt hat. Vielleicht interessiert es Sie: open link

+0

Ok, also musste ich eine Zeile hinzufügen <% - @ elvariable id = "foo" type = "com.mycompany.SomeObject" -%>. Ich denke immer noch, dass es möglich sein würde, es automatisch zu tun, in der Ecke, die Sie umrissen haben, könnten Sie nur "page" und "someOtherPage" zwei Optionen für variables "Modell" zur Verfügung stellen. Jede Option hätte einen anderen Typ: foo und bar. – NimChimpsky

+0

Ich habe diesen Blog tatsächlich gelesen und einen Kommentar gepostet. Ich habe fälschlicherweise angenommen, dass es einen Weg gibt, ihn ohne den zusätzlichen intellij-spezifischen Kommentar zum Laufen zu bringen. Bounty auf dem Weg ... – NimChimpsky

0

ich mit ähnlichem Problem konfrontiert, wenn starten meine eigenen Abfangjäger zu schreiben. Problem war, dass ich mit refference meiner Ansicht Resolver-Konfiguration starten xml issue

nicht Bauprojekte wie diese

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