2010-10-12 58 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"