Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Vaadin 7 CustomComponent带有@StyleSheet引用图像URL-拒绝对尚未发布文件的已发布文件请求_Java_Css_Vaadin - Fatal编程技术网

Java Vaadin 7 CustomComponent带有@StyleSheet引用图像URL-拒绝对尚未发布文件的已发布文件请求

Java Vaadin 7 CustomComponent带有@StyleSheet引用图像URL-拒绝对尚未发布文件的已发布文件请求,java,css,vaadin,Java,Css,Vaadin,我收到了一个拒绝已发布文件请求的请求,该请求针对css中引用了图像的自定义Vaadin 7组件,但该文件尚未发布 StyleSheet("mycomponent.css") @JavaScript( { "mycomponent1.js", "mycomponent2.js"}) public class MyComponent extends AbstractJavaScriptComponent { //... } 在mycomponent.css中,我有 background-

我收到了一个拒绝已发布文件请求的请求,该请求针对css中引用了图像的自定义Vaadin 7组件,但该文件尚未发布

StyleSheet("mycomponent.css")
@JavaScript( { "mycomponent1.js", "mycomponent2.js"})
public class MyComponent extends AbstractJavaScriptComponent { 
    //...
}
在mycomponent.css中,我有

background-image: url(mycomponent-bg.png);
瓦丁告诉我:

拒绝未发布文件的已发布文件请求:mycomponent-bg.png

查看Vaadin 7中发布的文件处理程序,它说:

如果资源以前已通过调用LegacyCommunicationManager#RegisterDependence(字符串,类)注册,则从类路径提供连接器资源。通过仅接受已显式注册的资源名称,可以防止从类路径发送任意文件。当前只能通过在连接器类上包含{@link JavaScript}或{@link StyleSheet}注释来注册资源

在组件中手动注册不起作用:

 LegacyCommunicationManager lcm = new LegacyCommunicationManager(this.getSession());
 lcm.registerDependency("mycomponent-bg.png", this.getClass()); // 1.try
 lcm.registerDependency("mypath/mycomponent-bg.png", this.getClass()); // 2.try

问题:在Vaadin 7中使用css样式自定义组件和图像的正确方法是什么?或:如何向依赖项添加任意文件?

解决此问题的方法是,将静态图像资源添加到/VAADIN/的子文件夹中,因为此文件夹中包含的所有资源始终可以以静态方式直接访问,甚至可以将样式表及其使用的所有图像移动到VAADIN主题中(有关如何操作的详细信息,请参阅VAADIN手册中的)

另一种方法(虽然相当混乱)是将所需的图像文件包含在@JavaScript注释中,使其成为组件的依赖项,这将导致它们与组件及其样式表一起正确发布,但在查看页面时也会在浏览器中产生错误


关于这一主题,还有一个(现已结束)和一个进一步详细说明了上述解决方案。

关于Vaadin 7。。。如果外部javascript或css加载图像,则应将其放置在/VAADIN/文件夹中。例如,如果在/VAADIN/js目录中有一个名为common.js的文件,您可以在java UI或AbstractJavaScriptComponent文件中使用路径@JavaScript({vaadin://js/common.js“})并放置与该目录相关的所有图像文件。。。它会很好用的……

谢谢。在css文件中使用“/VAADIN/mycomponent/mycomponent bg.png”的完整引用效果很好。如果项目是通过VAADIN 7 Eclipse插件设置的,这是一个更好的解决方案,特别是如果您有使用相同JS库的不同组件(VAADIN将处理它并只加载一次)。否则,对于那些使用Maven的人来说,
src/main/resources/
可以与
src/main/java
(java组件所在的位置)一起用于JS。解释可能会有所帮助。
@StyleSheet(..your css..)
public class YourAddonClass ... {

  static {
    VaadinSession.getCurrent().getCommunicationManager().
                registerDependency("mycomponent-bg.png",
    ClassInSamePackageAsmycomponent-bg.class);
   }

}