私は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は機能しません。
私は answer から引用していますが、ELが機能しないという問題について以前に提供しました:
つまり、EL式は評価されませんか?これには、次の1つ以上の原因が考えられます。
- 問題のアプリケーションサーバーはJSP 2.0をサポートしていません。
web.xml
は、サーブレット2.4以降として宣言されていません。@page
はisELIgnored=true
で設定されます。- 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を解析しますか?それらを削除して再試行してください。
<%@ page isELIgnored = "false"%>を設定すると助けてくれました。私の場合、なぜそれが問題の原因だったのか分かりません。なぜまだ明確ではない
私の場合、mavenアーキタイプジェネレーターによってwebappを生成しました。maven-archetype-webappを使用します。次の2つを変更する必要があります。
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">
デフォルトでは、Eclipseはヘッド付きのjspファイルを生成しました:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
削除するだけです。
BalusCがカバーしています 、しかしこれらのコメントを追加します:
<%@ taglib uri="http://Java.Sun.com/jsp/jstl/core" prefix="c"%>
JSTL TLD 名前空間には「jsp」を含める必要があります(上記を参照)。この名前空間エラーは古い指示に従うことが原因である可能性があるため、最新のドキュメントを確認して、WEB-INF/lib
に古いライブラリが含まれていないことを確認してください。かつては分離されていた多くのテクノロジーがコンテナに含まれるようになりました(EL言語は1つです)。
余談ですが、私は一般的に>
の代わりに gt
や<
の代わりにlt
のようなキーワードを使用します -これはXMLとその親しみやすい
JSPの<!DOCTYPE html>
行で、Eclipseで起動したTomcatがELを正しく解釈しないという問題がありました。 warを使用してwebapps
フォルダーにコピーし、コマンドラインを使用してTomcatを起動しました。
したがって、明らかにEclipse Tomcatプラグインには<!DOCTYPE html>
?!の問題があります。