我正在寻找一个关于如何加载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的共享资源机制是否有意义?
1条答案
按热度按时间bt1cpqcv1#
如果类MyCssResourceReference被移动到不同的包中,则需要调整路径中使用的..的数量
super(MyCssResourceReference.class,“../META-INF/resources/css/my.css”);
既然你想指向
root
,你可以这样做:字符串
Wicket使用
java.lang.Class#getResource()
加载类路径资源。“魔术”的图标spritesheet被发现没有明确提到任何Wicket代码
我不会说这是魔术!这是相对路径的工作方式!浏览器计算绝对路径并发出HTTP请求,Wicket处理没有问题。
undertow在提供META-INF目录中的内容时遇到了问题
您可以使用
/static
而不是/META-INF
!或任何其他您喜欢的自定义名称