Java Wicket资源问题

Java Wicket资源问题,java,wicket,resourcereference,Java,Wicket,Resourcereference,我正在开发一个web应用程序,我们将代码和web资源(如css、图像文件等)分开 我在这里有一个文件: 项目根/src/main/webapp/images/icons/16/add.png 在这个地方: 项目根/src/main/java/se/su/dsv/scipro/icons 我有一门课是这样的: package se.su.dsv.scipro.icons; import org.apache.wicket.ResourceReference; import org.apache.

我正在开发一个web应用程序,我们将代码和web资源(如css、图像文件等)分开

我在这里有一个文件:

项目根/src/main/webapp/images/icons/16/add.png

在这个地方:

项目根/src/main/java/se/su/dsv/scipro/icons

我有一门课是这样的:

package se.su.dsv.scipro.icons;

import org.apache.wicket.ResourceReference;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.model.Model;


public class ImageIcon extends Image {

    private static final long serialVersionUID = 1L;

    public static final String ICON_NEW_ADD = "../../../../../../webapp/images/icons/16/add.png";

    public ImageIcon(String id, String name, String size, String alt){
        super(id, new ResourceReference(ImageIcon.class, name));
        if(alt != null){
            add(new AttributeAppender("alt", true, new Model<String>(alt), " "));
        }
        else {
            add(new AttributeAppender("alt", true, new Model<String>(name), " "));
        }
    }

    public ImageIcon(String id, String name){
        this(id, name, "", null);
    }

    public ImageIcon(String id, String name, String alt){
        this(id, name, "", alt);
    }

    public static ResourceReference getImage(String imageName, String imageSize){
        return new ResourceReference(ImageIcon.class, imageName);
    }
}
我得到以下例外情况:

2011 Oct 18 11:11:17,947[ERROR] - RequestCycle - Can't instantiate page using constructor public se.su.dsv.scipro.basepages.DemoPage(org.apache.wicket.PageParameters) and argument 
org.apache.wicket.WicketRuntimeException: Can't instantiate page using constructor public se.su.dsv.scipro.basepages.DemoPage(org.apache.wicket.PageParameters) and argument 
    at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:212)
    at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:65)
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:298)
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320)
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234)
    at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
        at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250)
    at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
    at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
    at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
    at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)
    at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:319)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:188)
    ... 27 more
Caused by: java.lang.IllegalArgumentException: Invalid path ../../../../../../webapp/images/icons/16/add.png
    at org.apache.wicket.util.lang.Packages.absolutePath(Packages.java:105)
    at org.apache.wicket.util.lang.Packages.absolutePath(Packages.java:44)
    at org.apache.wicket.markup.html.PackageResource.<init>(PackageResource.java:504)
    at org.apache.wicket.markup.html.PackageResource.newPackageResource(PackageResource.java:448)
    at org.apache.wicket.markup.html.PackageResource.get(PackageResource.java:424)
    at org.apache.wicket.ResourceReference.newResource(ResourceReference.java:304)
    at org.apache.wicket.ResourceReference.bind(ResourceReference.java:151)
    at org.apache.wicket.markup.html.image.resource.LocalizedImageResource.bind(LocalizedImageResource.java:180)
    at org.apache.wicket.markup.html.image.resource.LocalizedImageResource.setResourceReference(LocalizedImageResource.java:246)
    at org.apache.wicket.markup.html.image.Image.setImageResourceReference(Image.java:178)
    at org.apache.wicket.markup.html.image.Image.<init>(Image.java:101)
    at org.apache.wicket.markup.html.image.Image.<init>(Image.java:77)
    at se.su.dsv.scipro.icons.ImageIcon.<init>(ImageIcon.java:83)
    at se.su.dsv.scipro.icons.ImageIcon.<init>(ImageIcon.java:93)
    at se.su.dsv.scipro.basepages.DemoPage.<init>(DemoPage.java:16)
    ... 32 more
2011年10月18日11:11:17947[错误]-请求周期-无法使用构造函数public se.su.dsv.scipro.basepages.DemoPage(org.apache.wicket.PageParameters)和参数实例化页面
org.apache.wicket.WicketRuntimeException:无法使用构造函数public se.su.dsv.scipro.basepages.DemoPage(org.apache.wicket.PageParameters)和参数实例化页面
位于org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:212)
位于org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:65)
位于org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:298)
位于org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320)
位于org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234)
位于org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
位于org.apache.wicket.RequestCycle.ProcessEventsAndResponse(RequestCycle.java:1250)
位于org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
位于org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
在org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
位于org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)
位于org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:319)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
位于org.springframework.orm.jpa.support.OpenEntityManagerViewFilter.doFilterInternal(OpenEntityManagerViewFilter.java:113)
位于org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
位于org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
位于org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
位于org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
运行(Thread.java:662)
原因:java.lang.reflect.InvocationTargetException
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:513)
位于org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:188)
... 还有27个
由以下原因引起:java.lang.IllegalArgumentException:无效路径../../../../../../../../../../../../../webapp/images/icons/16/add.png
位于org.apache.wicket.util.lang.Packages.absolutePath(Packages.java:105)
位于org.apache.wicket.util.lang.Packages.absolutePath(Packages.java:44)
位于org.apache.wicket.markup.html.PackageResource.(PackageResource.java:504)
位于org.apache.wicket.markup.html.PackageResource.newPackageResource(PackageResource.java:448)
位于org.apache.wicket.markup.html.PackageResource.get(PackageResource.java:424)
位于org.apache.wicket.ResourceReference.newResource(ResourceReference.java:304)
位于org.apache.wicket.ResourceReference.bind(ResourceReference.java:151)
位于org.apache.wicket.markup.html.image.resource.LocalizedImageResource.bind(LocalizedImageResource.java:180)
位于org.apache.wicket.markup.html.image.resource.LocalizedImageResource.setResourceReference(LocalizedImageResource.java:246)
位于org.apache.wicket.markup.html.image.image.setImageResourceReference(image.java:178)
位于org.apache.wicket.markup.html.image.image.(image.java:101)
位于org.apache.wicket.markup.html.image.image.(image.java:77)
在se.su.dsv.scipro.icons.ImageIcon.(ImageIcon.java:83)
在se.su.dsv.scipro.icons.ImageIcon.(ImageIcon.java:93)
在se.su.dsv.scipro.basepages.DemoPage.(DemoPage.java:16)
... 32多
我猜这是因为映像文件位于任何Java包之外?如何解决这个问题?

使用。使用它,图像的路径将被视为相对于上下文根

例如,如果使用以下HTML显示此图像:

<img src="images/icons/16/add.png">
您可能也会发现这很有用

据我所知,这个变体没有
ResourceReference
版本,不过您可以尝试集成本期JIRA中附带的版本:

使用。使用它,图像的路径将被视为相对于上下文根

例如,如果使用以下HTML显示此图像:

<img src="images/icons/16/add.png">
您可能也会发现这很有用

据我所知,这个变体没有
ResourceReference
版本
new Image("add", new ContextRelativeResource("/images/icons/16/add.png")))