挂毯5 - 动态生成Java代码的Web应用程序上下文文件夹文件的URL(Tapestry 5 -

2019-08-06 17:26发布

我在显示静态图像的资产组件里面,我不知道,直到运行时的形象应该是什么,所以我需要动态生成的URL。 这些图像都生活在webapp/images/

我发现的文件是不是在如何处理这个用例很清楚,但玩了后,我想通了,我可以在像这样的组件模板动态构建的网址:

<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
}

所以我的问题是:有没有一个Java代码等价的context: ...在简单地产生一个字符串基URL,我可以添加到我的文件路径网络申请上下文文件夹中的模板?

我可以看到这样做的一些明显的哈克方式从读取文档,像使用方案描述手动构建基本URL,或注入一个已知的静态图像作为Asset从该网络应用程序的上下文的文件夹,并调用toClientURL()以提取基URL。 但好像必须有一个很好的内置的方式在Java中做到这一点,特别是因为它是免费提供的模板中的扩展使用。

但谷歌的力气,我似乎无法找到如何做到这一点的任何地方!

Answer 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();
}

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



文章来源: Tapestry 5 - Dynamically generate URL of file in web app context folder in Java code
标签: java tapestry