如何在Tapestry 5中获取资产路径

时间:2013-10-10 16:14:32

标签: tapestry

如何获取资产目录的URL,以便可以在JavaScript中使用它来动态加载资产?

背景:
在Tapestry 5中,资产的路径可以改变以避免缓存问题。路径取决于应用程序的版本,因此通常在开发,测试和生产模式方面也有所不同。

注入资产并在Java中获取路径很容易。在.tml模板文件中,可以使用${asset:classpath:/com/example/myApp/img/test.png}包含网址。在CSS相对路径工作正常。 JavaScript的最佳解决方案似乎是在模板中包含脚本标记,并提供包含路径的全局属性。

问题是,如何在tapestry中获取资产基础URL? 如何使用JavaScript访问此路径?

2 个答案:

答案 0 :(得分:2)

查看讨论here和JIRA here

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