IntelliJ 9无法识别JSP中的隐式对象方法?

时间:2010-10-12 11:29:26

标签: jsp intellij-idea

我正在尝试IntelliJ IDEA 9 30天,我喜欢到目前为止我所看到的。我唯一明显的问题是编辑器似乎不知道如何处理JSP隐式对象方法......

示例1:

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

编辑器将此语句中的“println”标记为错误,并说:无法解析方法'println(java.lang.String)'此语法基本可以解决,如果我将它部署到我的应用服务器(Tomcat 7),它的工作正常,但IntelliJ坚持认为“out”对象没有这样的方法。它也不只是“出局”。它无法识别任何隐式对象的方法......

示例2:

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

在这种情况下,IntelliJ无法识别getServletContext()方法,但 识别getRealPath()方法。这有多奇怪?

让我感到震惊的是,我已经在网上搜索了IntelliJ 9中提到的这个问题,并且我想出了zilch。这表明我可能已经用我的设置做了一些奇怪的事情,但我无法想象。就像我上面所说的那样,如果我构建和部署,它的工作正常;让我的JSP页面遍布虚假的红色错误令人恼火。 Kinda首先打败了使用智能IDE的目的。

无论如何,我想我会在专家面前抛出这个,看看你们是否可以对这个问题有所了解。任何见解都将不胜感激!

3 个答案:

答案 0 :(得分:18)

outpageContextjspContext会出现此问题,因为它们使用JSP api提供的类(而不是servlet API)。

要使用它们(如果您正在使用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>

答案 1 :(得分:3)

您必须在每个附近出口(带复选标记) 文件 - &gt;项目结构 - &gt;模块 - &gt;依赖关系 - &gt;加 您打算部署的库。

答案 2 :(得分:3)

如果您在识别会话变量时遇到问题,请在IntelliJ中打开该文件。将以下页面指令放在文件的顶部,会立即使会话变量可用并在IntelliJ编辑器中识别。

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

如果您已有页面指令,则只需添加此属性:

session="true"