如何正确加载Wicket CSS和Icon资源?

eufgjt7s  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(77)

我正在寻找一个关于如何加载CSS文件和图标spritesheet与Wicket(版本9)的最佳实践方式。我有几个Java项目和CSS和图标spritesheet的一部分包含在my-resources.jar
以前,文件夹结构如下:

  • META-INF/resources/css/my.css
  • META-INF/resources/icons/spritesheet.png

CSS被包含在我的页面中,使用:

@Override
public void renderHead(IHeaderResponse response) {
  super.renderHead(response);
  response.render(CssHeaderItem.forReference(new MyCssResourceReference()));
}

字符串
其中,Reference类为:

package com.example.myapp.resources;

public class MyCssResourceReferenceextends CssResourceReference {
  public MyCssResourceReference()
  {
    // number of .. corresponds to package this class is located in
    super(MyCssResourceReference.class, "../../../../META-INF/resources/css/my.css");
  }
}


在CSS中,spritesheet是这样引用的:

.button {
  background: url(../icons/spritesheet.png);
  display: inline-block;
  height: 20px;
  width: 20px;
}

.button-close {
  background-position: -40px 0px;
}


这样做的好处是可以隐式地找到图标spritesheet,而不需要将其挂载为资源。但它也有几个缺点:

  • 如果类MyCssResourceReference移动到不同的包中,则需要调整路径中使用的..的数量
  • “魔术”的图标spritesheet被发现没有明确提到任何Wicket代码
  • undertow在提供META-INF目录(https://issues.redhat.com/browse/UNDERTOW-2186)中的内容时遇到了问题,如果应用程序在JBOSS服务器中运行,则会导致问题

因此,我现在想重新构建CSS和图标spritehseet资源的交付方式。在Wicket中,首选的方式是什么?
我想为我的资源保留一个单独的Wicket文件,但我可以自由地将资源移动到不同的文件夹/包。使用Wicket的共享资源机制是否有意义?

bt1cpqcv

bt1cpqcv1#

如果类MyCssResourceReference被移动到不同的包中,则需要调整路径中使用的..的数量
super(MyCssResourceReference.class,“../META-INF/resources/css/my.css”);
既然你想指向root,你可以这样做:

super(MyCssResourceReference.class, "/META-INF/resources/css/my.css");

字符串
Wicket使用java.lang.Class#getResource()加载类路径资源。
“魔术”的图标spritesheet被发现没有明确提到任何Wicket代码
我不会说这是魔术!这是相对路径的工作方式!浏览器计算绝对路径并发出HTTP请求,Wicket处理没有问题。
undertow在提供META-INF目录中的内容时遇到了问题
您可以使用/static而不是/META-INF!或任何其他您喜欢的自定义名称

相关问题