JSFアプリケーションの「javax.faces.PROJECT_STAGE」プロパティの影響を理解したかった。ニースのユースケースが以下のリンクに提示されました
https://dzone.com/articles/jsf-20-new-feature-preview-ser
http://www.Java-tutorial.ch/Java-server-faces/jsf-project-stage
検証エラーメッセージの表示を除いて、このプロパティが本当に役立つ他のユースケースはありますか?この変数をチェックして環境を特定し、特定の機能を変更できることを理解していますが、JSFが開発者を支援するために自動的に行うことはありますか?あなたのプロジェクトからの経験を共有することができれば素晴らしいでしょうか?
このパラメーターをDevelopment
に設定すると、パフォーマンスが多少犠牲になりますが、クライアント側のJavaScriptを含め、より優れたエラーメッセージが有効になります。
このパラメーターをProduction
に設定すると、一部のエラーメッセージが表示されなくなります パフォーマンスを重視 。
Wutzebaerによるcomment
によると このリンクされた投稿javax.faces.PROJECT_STAGE
プロパティは、特定の機能(リソースキャッシュなど)を有効にするかどうかを制御します。
PROJECT_STAGEをプロダクションとして設定すると、より良いエラーメッセージが表示されます。たとえば、入力フィールドの周りにh:formタグがない場合、ステージが開発として設定されていて、ステージがプロダクションとして設定されている場合(または開発以外の値)エラーメッセージは表示されません。
フォームコンポーネントの祖先には、UIFormが必要です。提案:必要なコンポーネントを
<h:form>
で囲みます
リソースでは、スタイルシート、JavaScriptライブラリ、ロゴ、ピクトグラムなどの静的リソースを参照します。
デフォルトでは、リソースはキャッシュの有効期限なしでロードされます(最大経過時間などで期限切れ)。リソースは静的であると想定されているため、サーブレットコンテナの存続期間中、リソースは変更されません。クライアント側でこれらのリソースをキャッシュすることにより、Webブラウザーのキャッシュにメリットがあります。
ただし、リソースのグループをラップする可能性があるライブラリの新しいバージョンをリリースする場合、ユーザーが古いバージョンのリソースに行き詰まることは望ましくありません。通常、実装と仕様に従って、リソースにはライブラリ名とバージョンがクエリ属性として自動的に追加されます。典型的なリソースは次のようなものとして自動的に出力されます:
<link type="text/css" rel="stylesheet" href="/nqp-web/javax.faces.resource/components.css.xhtml?ln=primefaces&v=6.2">
これは Resource
の特定の実装を使用して処理されます。
したがって、ライブラリの新しいバージョンをリリースしても、ユーザーはキャッシュ内の古いバージョンのリソースに悩まされることはありません。
ただし、開発作業中はバージョンは上がりませんが、キャッシュを(できればすぐに)期限切れにしたいとします。
デフォルトの実装では、通常、javax.faces.PROJECT_STAGE
の値、具体的にはDEVELOPMENT
に基づいて、有効期限が即時に設定されるようにします。あなたはモジャラの ResourceImpl
でそれを見ることができます例えば:
long expiresTime;
if (FacesContext.getCurrentInstance().isProjectStage(Development)) {
expiresTime = new Date().getTime();
} else {
expiresTime = new Date().getTime() + maxAge;
}
@vrccaですでに述べたように、isProjectStage
の使用法の クイック検索 は、これがDEVELOPMENT
に設定されている場合、追加のロギングをオンにするだけであることを明らかにします。
ResourceImpl
PROJECT_STAGEを開発として設定するもう1つの機能は、サーバーを再起動しなくても.xhtmlファイルの変更を確認できることです。