我在组件中显示静态图像资源,直到运行时我才知道该图像应该是什么,所以我需要动态生成URL.这些图像都存在于中webapp/images/
我发现的文档并不是很清楚如何处理这个用例,但在玩完之后我发现我可以在组件模板中动态构造URL,如下所示:
<img src="${context:img/score/overall}/${imageFilename}" />
Run Code Online (Sandbox Code Playgroud)
然后将要在其中显示的图像的逻辑放在组件类文件中:
public String getImageFilename() {
// decide which image to display and return the filename
}
Run Code Online (Sandbox Code Playgroud)
所以这可行,但它不是最干净的解决方案.我真的不想将URL基础连接到模板内的文件名 - 我更愿意在组件类中构造整个URL,如下所示:
<img src="${imageUrl}" />
Run Code Online (Sandbox Code Playgroud)
和
public String getImageURL() {
// build URL somehow like "context:" + "filePath" in template
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:context: ...模板中是否有一个Java代码,只是为web appl上下文文件夹生成一个String基本URL,我可以将其文件路径附加到?
我可以通过阅读文档看到一些明显的hacky方法,比如使用所描述的方案手动构建基本URL,或者Asset从Web应用程序上下文文件夹中注入一个已知的静态图像并调用toClientURL()以提取基本URL.但似乎在Java中必须有一个很好的内置方法来实现这一点,特别是因为它可以在模板扩展中自由使用.
但谷歌,因为我可能,我似乎无法找到如何在任何地方做到这一点!
我认为这应该适合你.(免责声明:我还没有测试过)
@Inject
private AssetSource assetSource;
@Inject
private Locale locale;
public String getImageURL() {
URL assetUrl = assetSource.getContextAsset("img/score/overall/" + getImageFilename(), locale).toURL();
return assetUrl.toString();
}
Run Code Online (Sandbox Code Playgroud)
编辑:已更新以反映霍华德的评论
| 归档时间: |
|
| 查看次数: |
3047 次 |
| 最近记录: |