首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tapestry 5-在Java代码中动态生成web应用程序上下文文件夹中文件的URL

Tapestry 5-在Java代码中动态生成web应用程序上下文文件夹中文件的URL
EN

Stack Overflow用户
提问于 2013-01-14 03:15:37
回答 1查看 3.2K关注 0票数 3

我在一个组件中显示一个静态图像资源,直到运行时我才知道该图像应该是什么,所以我需要动态生成URL。这些图像都保存在webapp/images/

The documentation I found不太清楚如何处理这个用例,但在尝试之后,我发现我可以在组件模板中动态构造URL,如下所示:

代码语言:javascript
复制
<img src="${context:img/score/overall}/${imageFilename}" />

然后将要显示的图像的逻辑放在组件类文件中:

代码语言:javascript
复制
public String getImageFilename() {
    // decide which image to display and return the filename
}

所以这是可行的,但它不是最干净的解决方案。我真的不想将URL基址连接到模板内的文件名-我更愿意在component类中构造整个URL,如下所示:

代码语言:javascript
复制
<img src="${imageUrl}" />

代码语言:javascript
复制
public String getImageURL() {
    // build URL somehow like "context:" + "filePath" in template
}

所以我的问题是:在模板中是否有context: ...的Java代码等价物,它只是为web上下文文件夹生成一个字符串基URL,我可以将我的文件路径附加到该文件夹?

通过阅读文档,我可以看到一些明显的老生常谈的方法,比如使用所描述的方案手动构建基本网址,或者从web应用程序上下文文件夹中注入一个已知的静态图像作为Asset,然后调用toClientURL()来提取基本网址。但在Java中似乎必须有一种很好的内置方法来实现这一点,特别是因为它可以在模板扩展中自由使用。

但是,尽管我可能在谷歌,我似乎找不到如何在任何地方做到这一点!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-14 08:50:31

我想这对你应该有好处。(免责声明:我没有测试过)

代码语言:javascript
复制
@Inject
private AssetSource assetSource;

@Inject
private Locale locale;

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

编辑:更新以反映霍华德的评论

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14307134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档