[解決済み] ELで定数を参照するには?
質問
JSPページでELを使った定数の参照はどのように行うのですか?
私は、インターフェイス
Addresses
という名前の定数を持つ
URL
. スクリプトでそれを参照できることは知っています。
<%=Addresses.URL%>
とすることで、スクリプトで参照できることは知っていますが、ELを使ってこれを行うにはどうしたらよいでしょうか?
どのように解決するのですか?
EL 3.0以降
すでにJava EE 7 / EL 3.0を利用している場合、その時点で
@page import
はELスコープでクラス定数もインポートします。
<%@ page import="com.example.YourConstants" %>
この場合、インポートされるのは
ImportHandler#importClass()
として利用できるようになります。
${YourConstants.FOO}
.
なお、すべての
java.lang.*
クラスはすでに暗黙のうちにインポートされ、次のように利用できます。
${Boolean.TRUE}
そして
${Integer.MAX_VALUE}
. 初期のバージョンではこれにバグがあったため、より最近のJava EE 7コンテナ・サーバーが必要なだけです。例えば、GlassFish 4.0 と Tomcat 8.0.0-1x は失敗しますが、GlassFish 4.1+ と Tomcat 8.0.2x+ は動作します。そして
web.xml
が、サーバーがサポートする最新のサーブレットバージョンに適合するように宣言されていることを絶対に確認する必要があります。したがって
web.xml
で、Conform Servlet 2.5 以前と宣言されている場合、Servlet 3.0+ の機能は動作しません。
また、この機能はJSPでのみ利用可能で、Faceletでは利用できないことに注意してください。JSF+Faceletsの場合、最善の策は
オムニフェース
<o:importConstants>
を以下のようにします。
<o:importConstants type="com.example.YourConstants" />
あるいは、EL コンテキストリスナーを追加して
ImportHandler#importClass()
を呼び出すようなELコンテキストリスナーを追加することもできます。
@ManagedBean(eager=true)
@ApplicationScoped
public class Config {
@PostConstruct
public void init() {
FacesContext.getCurrentInstance().getApplication().addELContextListener(new ELContextListener() {
@Override
public void contextCreated(ELContextEvent event) {
event.getELContext().getImportHandler().importClass("com.example.YourConstants");
}
});
}
}
EL 2.2 またはそれ以前
これは ではなく であり、EL 2.2以前では不可能です。いくつかの代案があります。
-
に入れる。
Map<String, Object>
として、アプリケーションスコープに置いてください。ELでは、マップの値は、通常のJavabeanの方法によって${map.key}
または${map['key.with.dots']}
. -
使用方法
<un:useConstants>
の 標準外 タグリブ (maven2 repo ここで ):<%@ taglib uri="http://jakarta.apache.org/taglibs/unstandard-1.0" prefix="un" %> <un:useConstants className="com.example.YourConstants" var="constants" />
この方法では、通常のJavabeanの方法である
${constants.FOO}
. -
Javaranchの CCC
<ccc:constantsMap>
の下のどこかに記述されているように この記事 .<%@ taglib uri="http://bibeault.org/tld/ccc" prefix="ccc" %> <ccc:constantsMap className="com.example.YourConstants" var="constants" />
この方法では、通常のJavabeanの方法である
${constants.FOO}
からもアクセスできるようになります。 -
JSF2を使っているのであれば
<o:importConstants>
の オムニフェイス .<html ... xmlns:o="http://omnifaces.org/ui"> <o:importConstants type="com.example.YourConstants" />
この方法では、通常のJavabeanの方法である
#{YourConstants.FOO}
からもアクセスできるようになります。 -
Javabeanスタイルのゲッターメソッドでそれらを返すラッパークラスを作成します。
-
定数の存在を最初にスキャンし、存在しない場合はデフォルトのリゾルバに委ね、それ以外の場合は代わりに定数の値を返す、カスタムELリゾルバを作成します。
関連
-
[解決済み] Objective-Cの定数
-
Serious: End event threw exception java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedM
-
[解決済み] Pythonで定数を作成するにはどうすればよいですか?
-
[解決済み] JavaScriptに定数はありますか?
-
[解決済み] ES6クラスで静的定数を宣言する?
-
[解決済み] JSTLでのif-elseオプションの使用方法
-
[解決済み】JSP 2を使用して、JSPファイル内のJavaコードを回避するにはどうすればよいですか?
-
[解決済み】静的定数文字列(クラスメンバ)
-
[解決済み】Ruby on Rails。グローバル定数を定義する場所はどこですか?
-
[解決済み] JSP EL、JSF EL、Unified ELの違い【終了しました
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Serious: End event threw exception java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedM
-
java オープンソースフレームワーク統合 Context initialization failed の共通エラー。
-
[解決済み] JSPページでサーブレットを呼び出す方法
-
[解決済み] JSTLでのif-elseオプションの使用方法
-
[解決済み] クッキーとセッションの違い?
-
[解決済み] JSTLをインストールするには?絶対 URI: http://java.sun.com/jstl/core は解決できません。
-
[解決済み] 別のJSPファイルをインクルードする
-
[解決済み] RequestDispatcher.forward()とHttpServletResponse.sendRedirect()の比較
-
[解決済み] JSP EL、JSF EL、Unified ELの違い【終了しました
-
[解決済み] jsp の出力から空白を取り除く