2010-10-12 11 views
8

Próbuję IntelliJ IDEA 9 przez 30 dni i podoba mi się to, co widzę do tej pory. Jedyny problem mam rażące jest to, że redaktor zdaje się nie mieć pojęcia, co zrobić z JSP metod niejawna obiektów ...IntelliJ 9 nie może rozpoznać metod obiektów niejawnych na stronach JSP?

Przykład 1:

<body> 
    <% out.println("Hello, World!"); %> 
</body> 

Edytor zaznacza „println” w tym oświadczeniu jako błąd i mówi: Nie można rozwiązać metody 'println (java.lang.String)' Ta składnia jest tak prosta, jak to tylko możliwe, i działa dobrze, jeśli zainstaluję ją na moim serwerze aplikacji (Tomcat 7), ale IntelliJ nalega, że ​​nie ma takiej metody dla obiektu "na zewnątrz". To nie tylko "out". To nie rozpoznaje żadnego niejawny obiektu metody ...

Przykład 2:

<body> 
    <% 
    String contextRoot = pageContext.getServletContext().getRealPath(""); 
    . 
    . 
    . 
    %> 
</body> 

W tym przypadku, IntelliJ nie rozpoznaje metody getServletContext(), ale robi rozpoznać Metoda getRealPath(). Jakie to dziwne?

To, co mnie dręczy, to to, że przeszukałem sieć, by wspomnieć o tym problemie z IntelliJ 9, i wymyśliłem zilcha. Sugeruje to, że być może zrobiłem coś dziwnego z moją konfiguracją, ale nie mogę sobie wyobrazić, co. Tak jak powiedziałem powyżej, działa dobrze, jeśli i tak zbuduję i wdrożyłem; po prostu irytujące jest to, że moje strony JSP są wypełnione fałszywymi czerwonymi błędami w każdym miejscu. Kinda przede wszystkim pokonuje cel użycia inteligentnego IDE.

W każdym razie, pomyślałem, że rzucę to przed ekspertów i zobaczę, czy możecie rzucić trochę światła na tę sprawę. Wszelkie docenianie byłoby docenione!

Odpowiedz

16

Będziesz mieć ten problem z out, pageContext i jspContext, ponieważ używają klas dostarczonych z apletem JSP (nie jest to API serwletu).

Aby z nich korzystać (jeśli pracujesz z projektem maven) dodać tę zależność:

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>jsp-api</artifactId> 
    <version>2.0</version> 
</dependency> 

Jeśli masz problem z każdego przedmiotu (session niejawny, request itp) należy dodać aplet zależność api też:

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>2.5</version> 
</dependency> 
+0

Dzięki za odpowiedzi, Colin. Właściwie nie pracuję z projektem Maven. To jest po prostu stara IntelliJ IDEA wdrażająca wybuchowy artefakt wojenny do Tomcat 7.Jestem otwarty na wykorzystanie projektu Maven jako alternatywy, ale wydaje się dziwne, że musiałbym po prostu wyczyścić wszystkie czerwone w edytorze ... – Syndog

+2

Czy dodałeś biblioteki aplikacji do swojego projektu? W 'file' ->' Struktura projektu' -> 'Moduły' ->' Zależności' -> 'Dodaj'. Jeśli skonfigurowałeś tomcat jako serwer aplikacji w IntelliJ, będziesz mógł dodać zależności. –

+0

Eureka! Okay, więc musimy dodać biblioteki serwerów aplikacji do zależności projektu. Nie zdawałem sobie sprawy, że te obiekty są specyficzne dla aplikacji internetowej. Tak więc, jeśli w pewnym momencie wdrażam na innym serwerze aplikacji (na przykład JBoss), musiałbym zrobić to samo z jego bibliotekami? Dziękuję bardzo za pomoc, Colin. – Syndog

3

musisz eksportu (z symbolem) w pobliżu każdego pliku
-> Siatka Project -> Moduły -> zależności -> Dodaj bibliotekami zamierzasz wdrożyć.

3

Jeśli masz problemy z rozpoznawaniem zmiennej sesji, otwórz plik w IntelliJ. Umieść następną dyrektywę strony u góry pliku i natychmiast zmienna sesji zostanie udostępniona i rozpoznana w edytorze IntelliJ.

<%@ page session="true" language="java" %> 

Jeśli masz już dyrektywę stronie można po prostu dodać ten atrybut:

session="true"