2010-10-12 49 views
8

我嘗試了30天的IntelliJ IDEA 9,並且我喜歡迄今爲止所看到的。唯一突出的問題我是主編似乎不知道該怎麼做JSP隱含對象的方法...IntelliJ 9無法識別JSP中的隱式對象方法?

例1:

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

編輯標誌着這一說法「的println」作爲一個錯誤,並說:無法解決方法'println(java.lang.String)'這種語法是基本的,你可以得到,它工作得很好,如果我把它部署到我的應用服務器(Tomcat 7),但IntelliJ堅持認爲沒有這種「出」對象的方法。它也不僅僅是「出」。它不識別任何對象的方法...

實施例2:

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

在這種情況下,的IntelliJ不能識別的getServletContext()方法,但它確實識別getRealPath()方法。這有多奇怪?

讓我失望的是,我已經在IntelliJ 9上搜索過任何有關此問題的Web,並且我已經提出了zilch。這表明,也許我已經做了一些奇怪的設置,但我無法想象是什麼。就像我上面所說的那樣,如果我仍然建立和部署,它就會工作得很好;只是讓我的JSP頁面遍佈各處的虛假紅色錯誤令人煩惱。有點擊敗了首先使用智能IDE的目的。

無論如何,我想我會在專家面前拋棄它,看看你們是否能夠解決這個問題。任何有識之士將不勝感激!

回答

16

由於它們使用JSP api(而不是servlet API)提供的類,因此您將遇到此問題out,pageContextjspContext

要使用它們(如果你與Maven項目工作),添加這種依賴性:

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

如果你有每天隱含對象(sessionrequest等)的問題,您應該添加Servlet API的依賴太:

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

感謝您的答覆,科林。實際上我並沒有使用Maven項目。這只是普通的IntelliJ IDEA,將一個爆炸的戰爭工件部署到Tomcat 7。我打算使用Maven項目作爲替代方案,但似乎很奇怪,我只需要清理編輯器中的所有紅色...... – Syndog 2010-10-12 12:06:05

+2

您是否在項目中添加了應用程序服務器庫?在'file' - >'Project structure' - >'Modules' - >'Dependencies' - >'Add'中。如果您在IntelliJ中將tomcat配置爲應用程序服務器,則可以添加依賴項。 – 2010-10-12 12:09:48

+0

尤里卡!好的,所以必須將應用程序服務器庫添加到項目依賴項中。我沒有意識到這些對象是特定於Web應用程序的。因此,如果我在某個時候部署到不同的應用程序服務器(例如JBoss),那麼我必須對其庫執行相同的操作?感謝你的幫助,科林。 – Syndog 2010-10-12 12:16:54

3

您必須導出(有標記)附近各
文件 - >項目結構 - >模塊 - >相關性 - >添加 庫你打算部署。

3

如果您在識別會話變量時遇到問題,請在IntelliJ中打開該文件。將以下頁面指令放在文件的頂部,並立即使會話變量在IntelliJ編輯器中可用並被識別。

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

如果你已經有了頁面指令,你可以簡單地添加這個屬性:

session="true"