【问题标题】:Tapestry 5 - Dynamically generate URL of file in web app context folder in Java codeTapestry 5 - 在 Java 代码中动态生成 W​​eb 应用程序上下文文件夹中的文件 URL
【发布时间】:2013-01-13 19:15:36
【问题描述】:

我在组件内显示静态图像资产,直到运行时我才知道该图像应该是什么,因此我需要动态生成 URL。这些图片都住在webapp/images/

The documentation I found 对如何处理这个用例不是很清楚,但是在玩弄之后我发现我可以像这样在组件模板中动态构造 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,或者从 web 应用程序上下文文件夹中注入已知的静态图像作为 Asset 并调用 @987654331 @ 提取基本 URL。但似乎在 Java 中必须有一个很好的内置方法来执行此操作,特别是因为它可以免费用于模板扩展。

但是我可能会在谷歌上搜索,我似乎无法在任何地方找到如何做到这一点!

【问题讨论】:

标签: java tapestry


【解决方案1】:

我认为这应该对你有用。 (免责声明:我没有测试过)

@Inject
private AssetSource assetSource;

@Inject
private Locale locale;

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

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

【讨论】:

  • 关闭;正确的方法是 AssetSource.getContextAsset(String path, Locale locale)。
  • AssetSource:一针见血——我知道这样的东西一定存在! @Howard 谢谢, .getContextAsset(String path, Locale locale) 确实正是我需要的。
猜你喜欢
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 2021-05-08
相关资源
最近更新 更多