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: ...模板中是否有等效的 Java 代码,它只是为我可以将文件路径附加到的 web appl 上下文文件夹生成字符串基本 URL?

通过阅读文档,我可以看到一些明显的 hacky 方法,例如使用所描述的方案手动构建基本 URL,或者Asset从 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 回答