3

コンポーネント内に静的な画像アセットを表示していますが、実行時までその画像がどうあるべきかわからないため、動的に URL を生成する必要があります。これらの画像はすべてwebapp/images/

私が見つけたドキュメンテーションは、このユースケースを処理する方法についてあまり明確ではありませんが、遊んだ後、次のようにコンポーネント テンプレートで URL を動的に構築できることがわかりました。

<img src="${context:img/score/overall}/${imageFilename}" />

次に、表示する画像のロジックをコンポーネント クラス ファイルに記述します。

public String getImageFilename() {
    // decide which image to display and return the filename
}

したがって、これは機能しますが、最もクリーンなソリューションではありません。テンプレート内のファイル名に URL ベースを連結したくはありません。次のように、コンポーネント クラスで URL 全体を構築したいと考えています。

<img src="${imageUrl}" />

public String getImageURL() {
    // build URL somehow like "context:" + "filePath" in template
}

私の質問は次のとおりですcontext: ...。ファイル パスを追加できる Web アプリ コンテキスト フォルダーの文字列ベース URL を単純に生成する、テンプレートに相当する Java コードはありますか?

Asset説明されているスキームを使用してベース URL を手動で構築する、またはWeb アプリのコンテキスト フォルダーから既知の静的イメージtoClientURL()を挿入し、ベース URL を抽出するために呼び出しを行うなど、ドキュメントを読むことで明らかにハッキーな方法がいくつかわかります。しかし、特にテンプレート展開で自由に使用できるため、Java でこれを行うための優れた組み込みの方法が必要なようです。

しかし、グーグルで検索しても、どこでもこれを行う方法が見つからないようです!

4

1 に答える 1

6

これでうまくいくはずです。(免責事項:私はそれをテストしていません)

@Inject
private AssetSource assetSource;

@Inject
private Locale locale;

public String getImageURL() {
    URL assetUrl = assetSource.getContextAsset("img/score/overall/" + getImageFilename(), locale).toURL();
    return assetUrl.toString();
}

編集:ハワードのコメントを反映するように更新

于 2013-01-14T00:50:30.743 に答える