2010-10-12 16 views
8

Tôi đang thử IntelliJ IDEA 9 trong 30 ngày, và tôi thích những gì tôi đang thấy cho đến nay. Vấn đề rõ ràng duy nhất tôi có là trình biên tập dường như không có ý tưởng gì để làm với JSP phương pháp đối tượng tiềm ẩn ...IntelliJ 9 không thể nhận ra các phương thức Implicit Object trong JSP?

Ví dụ 1:

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

các biên tập đánh dấu sự "println" trong bản Tuyên Bố này như là một lỗi và nói: Không thể giải quyết phương thức 'println (java.lang.String)' Cú pháp này là về cơ bản như bạn có thể nhận được, và nó hoạt động tốt nếu tôi triển khai nó đến máy chủ ứng dụng của tôi (Tomcat 7), nhưng IntelliJ khẳng định rằng không có phương pháp như vậy cho đối tượng "ngoài". Nó không chỉ là "ra", một trong hai. Nó không nhận ra phương pháp nào ngầm của đối tượng ...

Ví dụ 2:

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

Trong trường hợp này, IntelliJ không nhận ra phương pháp getServletContext(), nhưng nó không nhận ra phương thức getRealPath(). Lạ thật sao?

Điều khiến tôi bị thổi bay là tôi đã xóa bỏ Web để đề cập đến vấn đề này với IntelliJ 9, và tôi đã nghĩ ra điều đó. Điều này cho thấy rằng có lẽ tôi đã làm một cái gì đó freakish với thiết lập của tôi, nhưng tôi không thể tưởng tượng những gì. Như tôi đã nói ở trên, nó hoạt động tốt nếu tôi xây dựng và triển khai anyway; nó chỉ là khó chịu để có các trang JSP của tôi chứa đầy các lỗi màu đỏ giả trên khắp nơi. Kinda đánh bại mục đích sử dụng một IDE thông minh ngay từ đầu.

Dù sao, tôi nghĩ tôi sẽ ném điều này trước các chuyên gia và xem liệu các bạn có thể giải thích một chút về vấn đề này hay không. Bất kỳ cái nhìn sâu sắc sẽ được đánh giá cao!

Trả lời

16

Bạn sẽ gặp sự cố này với out, pageContextjspContext vì họ sử dụng các lớp được cung cấp với api JSP (không phải API servlet).

Để sử dụng chúng (nếu bạn đang làm việc với một dự án maven) thêm sự phụ thuộc này:

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

Nếu bạn có vấn đề với tất cả các đối tượng ẩn (session, request, vv), bạn nên thêm servlet api phụ thuộc quá:

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

Cảm ơn đã phản ứng, Colin. Tôi thực sự không làm việc với một dự án Maven. Đây chỉ đơn giản là IntelliJ IDEA triển khai một vật phẩm chiến tranh bùng nổ cho Tomcat 7.Tôi đang mở để sử dụng một dự án Maven như là một thay thế, nhưng có vẻ kỳ lạ mà tôi cần phải chỉ để làm sạch tất cả các màu đỏ trong trình soạn thảo ... – Syndog

+2

Bạn đã thêm lib máy chủ ứng dụng trong dự án của bạn? Trong 'file' ->' Project structure' -> 'Modules' ->' Dependencies' -> 'Add'. Nếu bạn đã cấu hình tomcat như một máy chủ ứng dụng trong IntelliJ, bạn sẽ có thể thêm các phụ thuộc. –

+0

Eureka! Được rồi, vì vậy, hãy thêm thư viện máy chủ ứng dụng vào các phụ thuộc của dự án. Tôi đã không nhận ra rằng các đối tượng này là ứng dụng web cụ thể. Vì vậy, nếu tôi đang triển khai đến một máy chủ ứng dụng khác nhau tại một số điểm (ví dụ: JBoss), tôi sẽ phải làm điều tương tự với các thư viện của nó? Cảm ơn rất nhiều vì sự giúp đỡ của bạn, Colin. – Syndog

3

Bạn phải xuất khẩu (với một dấu kiểm) gần nhau của tập tin
-> Kết cấu đề tài -> Modules -> Dependencies -> Add libs bạn dự định triển khai.

3

Nếu bạn gặp sự cố với biến phiên đang được nhận dạng, hãy mở tệp trong IntelliJ. Đặt chỉ thị trang sau ở đầu tệp của bạn và ngay lập tức biến phiên sẽ được tạo sẵn và được nhận dạng trong trình chỉnh sửa IntelliJ.

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

Nếu bạn đã có chỉ thị trang, bạn chỉ có thể thêm thuộc tính này:

session="true" 
Các vấn đề liên quan