自定义Java Tapestry @IncludeStylesheet批注

时间:2011-01-21 08:02:11

标签: java annotations stylesheet tapestry

使用Tapestry 5,我正在寻找一种(如果可能的话)自定义@IncludeStylesheet注释的优雅方式,以便自动将版本号添加到样式表文件名中。

例如

  @IncludeStylesheet("context:/css/decoration.css")

会自动生成带有v版本号

的CSS包含
  <link href="/css/decoration.css?v=12345" rel="stylesheet" type="text/css">

添加新注释,例如@IncludeStylesheetVersion,这是我最初的想法 看看Tapestry代码,看起来我已经领先于一些代码复制/重构,新的RenderSupportDocumentLinker(以及其他)实现。

是否有更简单的方法可以继续?

2 个答案:

答案 0 :(得分:4)

您可能根本不需要这样做:资产版本控制内置于Tapestry中。默认行为,根据docs

  

Tapestry为资产创建新的URL   (无论是上下文还是类路径)。该   网址格式为/assets/application version number/folder/path

     
      
  • 应用程序版本号:由符号tapestry.application-version定义,默认值为随机十六进制数。
  •   

如果您只需要确保客户端在更新后会看到更改的样式表,并且您不会一直重新启动应用程序,则默认行为(随机十六进制数字)应该可以正常运行。

根据评论进行修改:这也是available in 5.1

  
      
  • app / app-version(适用于在或以下获得的资产)   申请包)
  •   
  • classpath / app-version(用于从任何其他方式获得的资产)   未映射的包)
  •   
     

其中version是Tapestry框架版本,app-version是应用程序版本(如果没有明确配置,它将是随机字符串)。

只需检查Tapestry为您的CSS文件生成的网址,它们应如下所示:http://myserver.com/assets/ctx/942f15f778dca26c/css/styles.css

答案 1 :(得分:1)

总的来说,您为升级到5.3而付出的努力可能比尝试创建注释以模仿当前版本的内置功能更好。我认为您会发现升级过程非常轻松 - 特别是如果您已经进行了良好的集成测试。