如何获取资产目录的URL,以便可以在JavaScript中使用它来动态加载资产?
背景:
在Tapestry 5中,资产的路径可以改变以避免缓存问题。路径取决于应用程序的版本,因此通常在开发,测试和生产模式方面也有所不同。
注入资产并在Java中获取路径很容易。在.tml
模板文件中,可以使用${asset:classpath:/com/example/myApp/img/test.png}
包含网址。在CSS相对路径工作正常。 JavaScript的最佳解决方案似乎是在模板中包含脚本标记,并提供包含路径的全局属性。
问题是,如何在tapestry中获取资产基础URL? 如何使用JavaScript访问此路径?
答案 0 :(得分:2)
Thiago H. de Paula Figueiredo创建了一个RequestFilter来解决此问题,以便他可以使用wymeditor在javascript中加载动态相对资源。源代码here
*编辑* 以上评论是指最新(未发布)版本5.4的挂毯。
对于小于5.4的版本,我假设您可以通过以下方式获取根类路径资产URL:
${asset:classpath:/}
或者
@Inject
private AssetSource assetSource;
public String getRootPath() {
return assetSource.getClasspathAsset("/").toClientURL();
}
答案 1 :(得分:0)
也许这会奏效:
@Inject @ClasspathProvider
private AssetFactory classpathAssetFactory;
public String getClasspathRootUrl() {
Resource classpathRoot = classpathAssetFactory.getRootResource();
return classpathAssetFactory.createAsset(classpathRoot).toClientURL();
}