8

JSF/Primefaces を使用して Web アプリケーションを構築しています。「定数」クラス、つまり定数で構成されるクラスが必要です。これらの定数は、主にアプリケーション全体で使用されるナビゲーション コマンドです。私がこれを行っている理由は、アドホック ベースでインスタンス化された文字列を避けるためです。

バッキング Bean と XHTML ファイルの両方から定数にアクセスできるようにするにはどうすればよいですか?

@ApplicationScopedSingleton-pattern (Singleton クラス) を使用して使用しようとしましたが、スコープの問題のために機能させることができません。

または、間違ったアプローチを使用しているだけかもしれません。どんなアイデア/提案も大歓迎です。

4

1 に答える 1

13

バッキング Bean と XHTML ファイルの両方から定数にアクセスできるようにするにはどうすればよいですか?

バッキング Bean では、明らかに簡単です。それらは単なる Java クラスであるため、「通常の」Java の方法と変わりません。enums またはpublic static finalフィールドを使用できます。見解では、これは別の話です。つまり、今後のバージョン 3.0 まで、EL は定数をまったくサポートしません。

ELは文字列比較で列挙型を暗黙的にサポートしているため、列挙型を使用することをお勧めします。コンパイル時/実行時の型の安全性チェックは行いませんが、列挙名を文字列として使用できます。例えば

<h:someComponent ... rendered="#{order.status == 'SHIPPING'}" />

より自己文書化されたコードと実行時チェックを好む場合 (いいえ、コンパイル時チェックは不可能です)、OmniFaces <o:importConstants>の使用を検討できます。

<o:importConstants type="com.example.OrderStatus" />
<h:someComponent ... rendered="#{order.status == OrderStatus.SHIPPING}" />

これは IMO で、もう少しぎこちないだけです。ただし、ランタイム チェックは開発中は便利です。タイプミスは簡単に見落とされます。

今後の EL 3.0 ( JSR-341、Java EE 7 の一部) では、同じ方法で定数を参照できます。ELで定数を参照する方法も参照してください。これには、標準の JSP/Facelets タグがないため、定数のプログラムによるインポートのみが必要です。

于 2012-10-01T11:39:48.997 に答える