2015-01-12 12 views
5

私のアプリケーションにクラスパスから.jsファイルをロードするための@JavaScriptアノテーションがあります。Vaadin @Javascript:更新されたJSファイルのキャッシュをクリアする

私はファイルを更新して(ローカルに)再配布しましたが、私はいつも古いバージョンを元に戻します。私はすべてをリロードしようとしましたが(Ctrl + R、Ctrl + F5)、それは動作しません。また、ユーザーがそれをしなくてもいいと思っています。

過去に(Vaadinなしで)私が使っていたトリックは、バージョン(たとえばバージョン= 1)のリクエストパラメータを追加し、URLが変更されるように更新しました。しかし、明らかに@JavaScriptアノテーションには許可されていません(Vaadinはファイルをロードしようとしません)。

+0

あなたのアプリは@PreserveOnRefreshアノテーションをUIオブジェクトで使用しているのでしょうか?これにより、VaadinがJSをリロードするのを防ぐことができます。 –

+0

いいえ、私は@PreserveOnRefreshを使用していません。また、サーバーを再起動して、違いが生じないようにしました。私は現在、ファイル名を変更しました(xxxは数字で、_vxxxが追加されました)。 – herman

+0

あなたは、サーバーの再起動でも「古い」ファイルが保持されていると言っていますか?ターゲットディレクトリのファイルに対して 'find'を実行できますか?それは数回あります(たとえば、あなたのideから1回、ビルドツールから1回)。両方がクラスパス内にある場合は、1つしか取得されません。 – cfrick

答えて

2

私は、Vaadinのサーブレット構成のresourceCacheTimeパラメータを利用することにより、これを克服した:

@VaadinServletConfiguration(ui = MyUI.class, resourceCacheTime = 0) 

another question hereに私の答えで説明したように、それはその制限がありが。

1

これは、ローカルのキャッシュJSファイルに対するブラウザ機能です.Vaadinとは関係ありません。

あなた自身で把握しているとおり、ユーザーに最新のJSファイルがあることを確認するには、JSファイル名の名前をscript_buildNumber.jsに変更する必要があります。

+0

これはVaadinとは何の関係もないことに同意しません.Webアプリケーションがブラウザに伝える方法があります。特定のリソースをキャッシュしません。私は自分自身でファイルの名前を変更する答えを思いついたが、それは本当にハックだ。少なくともリクエストパラメータを追加できれば、バージョン管理で実際のファイル名を変更する必要がなくなります。 – herman

+0

コンテナを再起動すると、新しいファイルがディスクから新しく読み込まれ、CTRL-F5が少なくともFxでリロードされ、デフォルトの設定で新しいファイルがプルされます。 – cfrick

0

Chromeのシークレット機能を使用します(スパイシーで不快なウェブサイトにアクセスするときは使用しないでください)。

ブラウザをシークレットモードhttps://support.google.com/chrome/answer/95464?hl=enで開くと、ブラウザは何もキャッシュしません。

他のブラウザにもこの機能があります(Opera、IE、Firefox、Safari)。

+0

シマンテックモードでウェブアプリケーションを訪問して、最新のjavascriptファイルがあることを確認する必要はありません。 Vaadinは、ブラウザにキャッシュしないように指示する方法を提供するか、名前に要求パラメータを追加することをサポートして、ファイルの名前を物理的に変更する必要はありません。 – herman

+0

確かに、私はあなたに同意する、私はあなたが開発のためだけにそれを必要と思った。 – tonix

0

1月12日の質問に私のコメントで触れたように、ファイルの名前を変更することができました。これは現時点では唯一の方法だと思われますが、それは理想からはほど遠いものです。

関連する問題