【问题标题】:Images referencing in CSS with Wicket for hundreds of images在 CSS 中使用 Wicket 引用数百个图像的图像
【发布时间】:2011-03-11 22:53:23
【问题描述】:

作为另一个不错的帖子,我们可以将这样的内容用于 1 个单张图片:

mountSharedResource("/images/logo.gif", new ResourceReference(ImageScope.class, "logo.gif").getSharedResourceKey());

但是如果我们有 100 张图片需要共享呢?将它们一一映射实际上是不可能的。有没有什么好方法可以自动挂载1个目录的所有图片?

如果没有,我正在考虑为驻留在具体图像目录中的所有图像自动在循环中执行 mountSharedResource 编写一些支持。但实际上我不确定这是否是正确的方向。

谢谢。

【问题讨论】:

    标签: css image wicket


    【解决方案1】:

    好吧,我解决了这个问题:

    private void mountResources(Class clazz, String directory) {
        java.net.URL url = clazz.getResource(clazz.getSimpleName() + ".class");
    
        File[] files = new File(url.getPath()).getParentFile().listFiles();
    
        for (int i=0; i< files.length; i++) {
            String fileName = files[i].getName();
            if (!fileName.endsWith("class")) {
                mountSharedResource("/" + directory + "/" + fileName, new ResourceReference(clazz, fileName).getSharedResourceKey());
            }
        }
    }
    

    并像这样使用它:

        mountResources(ImagesScope.class, "images");
        mountResources(FontsScope.class, "fonts");
        mountResources(JsScope.class, "js");
    

    但令人难以置信的是,Wicket 在内部以某种方式不支持它。我很惊讶。对于为整个包安装可收藏的页面,我们有 mount(path, packageName),但对于资源则没有(如果我理解正确的话)。

    【讨论】:

    • 仅供参考 - mountSharedResource 从 1.5-rc2 起重命名为 mountResource
    【解决方案2】:

    这会影响您应用的性能。 最好为所有图像挂载一个共享资源,然后根据传递的请求参数加载不同的图像并将它们流回响应中。

    【讨论】:

    • 感谢 Martin 的回答,但这在我看来非常复杂。你包装了 Request 对象?我对 Wicket 的唯一要求实际上是告诉“共享图像在目录 /images/ 中”很简单。
    【解决方案3】:

    我不确定这是您需要的,但我发现以下 sn-p 可以帮助我解决类似问题:

    getMarkupSettings().setAutomaticLinking(true);
    

    我在Wicket's Wiki 上发现了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      相关资源
      最近更新 更多