2011-04-19 65 views
1

嘗試顯示項目列表時出現以下問題。對於每個項目,我必須顯示通過Wicket WebResource動態加載的圖像。在用戶滾動時,使用Ajax滾動在—時間步驟— 50加載項目。未找到Wicket圖像組件

[ERROR] 2011-04-19 09:58:18000 btpool0-1 org.apache.wicket.RequestCycle.logRuntimeException(主機=,=請求,現場=): org.apache.wicket.WicketRuntimeException :組件documentList:scroller:batchElem:666:content:item:3:batchItemContent:linkToPreview:image在第com.webapp.document.pages.DocumentListPage頁面找不到的縮略圖 listener interface = [RequestListenerInterface name = IResourceListener,method = public abstract void org.apache.wicket.IResourceListener.onResourceRequested()]

org.apache.wicket.protocol.http.request.InvalidUrlException:org.apache.wicket.WicketRuntimeException:component documentList:scroller:batch Elem:666:content:item:3:batchItemContent:linkToPreview:imageThumbnail not found on page com.webapp.document.pages.DocumentListPage [id = 1] listener interface = [RequestListenerInterface name = IResourceListener,method = public abstract void org。 apache.wicket.IResourceListener.onResourceRequested()] at org.apache.wicket.protocol.http.WebRequestCycleProcessor.resolve(WebRequestCycleProcessor.java:262) at org.apache.wicket.RequestCycle.step(RequestCycle.java:1310) at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1428) at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) at org.apache.wicket.protocol.http.WicketFilter。 doGet(WicketFilter.java:479) at org.apache.wicket.protocol.http.WicketFilter $$ EnhancerByGuice $$ 51619816.CGLIB $ doGet $ 6() at org.apache.wicket.protocol.http.WicketFilter $$ EnhancerByGuice $$ 51619816 $$ FastClassByGuice $$ 6d42bf5d.invoke() com.google.inject.internal.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java: 228) 在com.google.inject.internal.InterceptorStackCallback $ InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64) 在com.freiheit.monitoring.PerformanceMonitoringMethodInterceptor.invoke(PerformanceMonitoringMethodInterceptor.java:115) 在com.google.inject。 internal.InterceptorStackCallback $ InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64) at com.google.inject.internal.InterceptorStackCallback.intercept(InterceptorStackCallback.java:44) at org.apache.wicket.protocol.http.WicketFilter $$ EnhancerByGuice $$ 51619816.doGet() 在org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:312) 在org.apache.wicket.protocol.http.WicketFilter $$ EnhancerByGuice $$ 51619816.CGLIB $ $的doFilter 4()

這個問題怎麼解決?

下面是代碼的負責添加圖像的一部分:

previewLink.add(createThumbnailSmall("imageThumbnail", documentModel)); 

createThumbnailSmall(final String id, final IModel<BaseDocument> documentModel) { 
    // thumbnailResource is an object that contains the path of the image 

    if (thumbnailResource != null) { 
     final WebResource resource = getWebResource(thumbnailResource); 
     final Image image = new Image(id, resource); 
     return image; 
    } 
    return new InvisibleContainer(id); 
} 

WebResource getWebResource(final DocumentResource documentResource) { 
    return new WebResource() { 

     private static final long serialVersionUID = 1L; 

     @Override 
     public IResourceStream getResourceStream() { 
      return new BaseStreamResource(documentResource); 
     } 
    }; 
} 

其中BaseStreamResource如下:

public class BaseStreamResource extends AbstractResourceStream { 
    private InputStream  _fileInputStream = null; 
    private DocumentResource _resource  = null; 

    public BaseStreamResource(final DocumentResource documentResource) { 
     _resource = documentResource; 
    } 

    @Override 
    public InputStream getInputStream() throws ResourceStreamNotFoundException { 
     if (_fileInputStream == null) { 
      try { 
       if (_resource == null) { 
        throw new ResourceStreamNotFoundException("Resource was null"); 
       } 
       _fileInputStream = _resource.getFileInputStream(); 
      } catch (final ResourceNotAvailableException ex) { 
       throw new ResourceStreamNotFoundException(ex); 
      } 
     } 
     return _fileInputStream; 
    } 

在HTML:

<a wicket:id="linkToPreview" href="#"> 
<img wicket:id="imageThumbnail" alt="Attachment"></img></a> 
+0

它會如果顯示加載圖像時涉及的一些代碼,則可以提供幫助。 – 2011-04-19 09:35:58

+0

哪個URL用於ImageUrl? – 2011-04-19 09:38:22

+0

我已將代碼附加到最初的帖子 – Flori 2011-04-19 10:32:38

回答

1

下列溶液解決了這個問題:
- 延伸WebResource類
- 添加擴展類作爲資源的應用程序共享資源

例:

public class MyWebResource extends WebResource { 
    final ValueMap map = new ValueMap(); 

    @Override 
    public IResourceStream getResourceStream() {   
     String fileName = getFileName(); 
     File file = new File(basePath, fileName); 

     if (!file.exists()) { 
      LOG.error("File does not exist: " + file); 
      throw new IllegalStateException("File does not exist: " + file); 
     }  
     return new FileResourceStream(file); 
    }   

    public final void addResource() { 
     Application.get().getSharedResources().add(getClass().getName(), this); 
    } 

    protected String getFileName() { 
     return getParameters().getString("id"); 
    } 

    public final String urlFor(final String fileName) {   
     final ResourceReference resourceReference = new ResourceReference(getClass().getName());   
     final String encodedValue = WicketURLEncoder.QUERY_INSTANCE.encode(fileName); 
     map.add("id", encodedValue); 
     final CharSequence result = RequestCycle.get().urlFor(resourceReference, map);  
     if (result == null) { 
      throw new IllegalStateException("The resource was not added! " 
       + "In your Application class add the following line:" 
       + "MyConcreteResource.INSTANCE.addResource()"); 
     } 

     String absoluteUrl = RequestUtils.toAbsolutePath(result.toString());   
     return absoluteUrl;  
    } 
} 

在應用類,在初始化( ),我已將MyWebResource添加到共享資源中:

public void init() { 
    ... 
    new MyWebResource().addResource();   
    ... 
} 
1

添加的代碼並沒有真正爲我添加任何線索,但也許我可以幫助縮小它的一點點無論如何。

stacktrace包含對com.webapp.document.pages.DocumentListPage的引用,該引用可能會調用您發佈的某些代碼。該錯誤表明網址不正確,因此調試到該類中,添加調試打印以及查看包含url的任何字段的值可能是值得的。

它甚至可能有助於修改DocumentListPage(可能暫時用於調試)中的代碼,以捕獲org.apache.wicket.protocol.http.request.InvalidUrlException並在發現異常時專門添加調試打印。

這不是一個真正的答案,但它太大了評論,也許它會幫助你更接近答案。