web-dev-qa-db-ja.com

JSPの式言語が機能しない

私はJSPを初めて使い、Expression言語を使用しています。バージョン2.5およびTomcat 6サーバーでEclipse Galileoを使用しています。私は、単純な式言語が偽を与えることを想定して${1>2}を書いているが、ページをレンダリングするときにのみ${1>2}を表示しているように、ベールを印刷しないようにしたいだけです。しかし、<c:out value="${1>2}"/>を使用している場合、正しくfalseが出力されます。タグライブラリに問題があると思います。理由を教えてください。私が間違っている場所を理解できるように、このためのサンプルコードを提供しています。

<%@ page language="Java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://Java.Sun.com/jstl/core" prefix="c" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                                 "http://www.w3.org/TR/html4/loose.dtd">


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Expression Language Example</title>
</head>
<body>

Is 1 greater than 2 using cout  :<c:out value="${1>2}"/>

Is 1 greater than 2 without using cout: ${1>2}
</body>
</html> 

更新回答ごとに、ここに詳細があります:

私はweb.xmlがどのように見えるかを示しています:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://Java.Sun.com/xml/ns/javaee" xmlns:jsp="http://Java.Sun.com/xml/ns/javaee/jsp" xmlns:web="http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>ScriptLessJsp</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
    <description></description>
    <display-name>ElServlet</display-name>
    <servlet-name>ElServlet</servlet-name>
    <servlet-class>com.servlet.El.ElServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ElServlet</servlet-name>
    <url-pattern>/ElServlet</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>Collections</display-name>
    <servlet-name>Collections</servlet-name>
    <servlet-class>com.servlet.El.Collections</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Collections</servlet-name>
    <url-pattern>/go</url-pattern>
  </servlet-mapping>
</web-app>

そして、私のlibフォルダーにjstl.jarのみを追加したので、<c:out>タグを使用して表示できますが、テンプレートテキストのELは機能しません。

29
user262577

私は answer から引用していますが、ELが機能しないという問題について以前に提供しました:

つまり、EL式は評価されませんか?これには、次の1つ以上の原因が考えられます。

  1. 問題のアプリケーションサーバーはJSP 2.0をサポートしていません。
  2. web.xmlは、サーブレット2.4以降として宣言されていません。
  3. @pageisELIgnored=trueで設定されます。
  4. Web.xmlは、<el-ignored>true</el-ignored><jsp-config>で構成されます。

特定のケースでは、ELはtaglibで動作しますが、テンプレートテキストでは動作しないため、ポイント2が原因であると考えられます。web.xml少なくとも Servlet 2.4として宣言されていることを確認してください。 Tomcat 6.0はServlet 2.5をサポートしているため、web.xmlをServlet 2.5として宣言することをお勧めします。

<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://Java.Sun.com/xml/ns/javaee"
    xmlns:web="http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="Your_WebApp_ID"
    version="2.5">

    <!-- Here you go. -->

</web-app>

私がこれについて見たもう一つのまれな原因は、クラスパス内のEL JARとの衝突があることです。 notがアプリサーバー固有のJARファイルをWebアプリケーションのWEB-INF/libまたは、さらに悪いことにJRE/libにコピーしていることを確認してください。

すでにEclipseとTomcatを使用しているので、このすべてに使用した開発手順を確認します。 「Eclipse for Java [〜#〜] ee [〜#〜] developers」を使用し、TomcatインスタンスをEclipseに統合していることを確認してください。 Serversビューと、Tomcatインスタンスを使用する「Servlet 2.5」に設定されたDynamic Web Projectを作成したこと。この方法ですべてが自動的に行われます(Eclipseはビルドパス自体にappserverのライブラリを取得し、Servlet 2.5準拠のweb.xmlを自動生成します)。

更新:更新ごと:com.servlet.Elサーブレットは疑わしいように見えます。彼らは正確に何をしますか? ELを解析しますか?それらを削除して再試行してください。

52
BalusC

<%@ page isELIgnored = "false"%>を設定すると助けてくれました。私の場合、なぜそれが問題の原因だったのか分かりません。なぜまだ明確ではない

12
Ilya Yevlampiev

私の場合、mavenアーキタイプジェネレーターによってwebappを生成しました。maven-archetype-webappを使用します。次の2つを変更する必要があります。

  1. web.xmlで、ヘッドを次のように変更します。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://Java.Sun.com/xml/ns/javaee" 
      xmlns:web="http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
      xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee  http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
      version="2.5">
    
  2. デフォルトでは、Eclipseはヘッド付きのjspファイルを生成しました:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    

削除するだけです。

11
Jimmy

BalusCがカバーしています 、しかしこれらのコメントを追加します:

<%@ taglib uri="http://Java.Sun.com/jsp/jstl/core" prefix="c"%>

JSTL TLD 名前空間には「jsp」を含める必要があります(上記を参照)。この名前空間エラーは古い指示に従うことが原因である可能性があるため、最新のドキュメントを確認して、WEB-INF/libに古いライブラリが含まれていないことを確認してください。かつては分離されていた多くのテクノロジーがコンテナに含まれるようになりました(EL言語は1つです)。

余談ですが、私は一般的に>の代わりに gt<の代わりにltのようなキーワードを使用します -これはXMLとその親しみやすい

4
McDowell

JSPの<!DOCTYPE html>行で、Eclipseで起動したTomcatがELを正しく解釈しないという問題がありました。 warを使用してwebappsフォルダーにコピーし、コマンドラインを使用してTomcatを起動しました。

したがって、明らかにEclipse Tomcatプラグインには<!DOCTYPE html> ?!の問題があります。

0
Niklas P