2015-08-13 107 views
0

我真的難住這個: 這是我創建動態圖像的方法。Wicket 6 NonCachingImage不顯示在HTML中

private Image createImage(final String id, final byte[] imageData){ 
      NonCachingImage chartImage=new NonCachingImage(id) { 
      private static final long serialVersionUID = 1L; 

      @Override 
      protected IResource getImageResource() { 
       return new DynamicImageResource(){ 
        private static final long serialVersionUID=1L;     
        @Override 
        protected byte[] getImageData(Attributes attributes) { 
         String myImageStr = new StringBuffer(
           WicketApplication.TOMCAT_IMAGE_DOC_BASE). 
           append("13835.jpg").toString(); 
         File file = new File(myImageStr); 
         try { 
          return Files.readBytes(file); 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         return null; 
        } 
       }; 
      } 

      }; 
      chartImage.setOutputMarkupId(true); 
      chartImage.setOutputMarkupPlaceholderTag(true); 
      return chartImage; 
    } 

這是我使用它

圖像IMG =的createImage( 「orig_photo」,uploadedFile.getBytes()); pnlForm.addOrReplace(img);

我的HTML

<img width="100" height="133" title="Photo" wicket:id="orig_photo"/>

得到這個錯誤:

得到這個錯誤在Javascript檢查元素: GET https://localhost/admin/admnwtxtprofile?5-IResourceListener-wProfileTxtPnl-wProfileTxtForm-orig_photo&antiCache=1439492929071 404(未找到)

回答

1

你的imageData提供給您的createImage然後不用在裏面的方法。 我假設你上傳的文件來自某個文件夾?可能是臨時?

下面類似於你的代碼工作正常,顯示圖像。

public class WicketApplication extends WebApplication { 

    public static final String LOCAL_IMAGE_BASE = "c:\\myimages\\"; 
... 
} 

public class TestDynaImageFilePage extends WebPage { 

    public TestDynaImageFilePage(PageParameters parameters) { 
     super(parameters); 
     Form<Void> form = new Form<Void>("imageForm"); 
     form.setOutputMarkupId(true); 

     add(form); 

     addFormComponents(form); 
    } 

    private void addFormComponents(Form<Void> form) { 
     Path path = Paths.get("src/main/webapp/images/help.png"); 
     try { 
      byte[] data = java.nio.file.Files.readAllBytes(path); 
      Image img = createImage("orig_photo", data); 
      form.addOrReplace(img); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    private Image createImage(final String id, final byte[] imageData) { 
     NonCachingImage chartImage = new NonCachingImage(id) { 
      private static final long serialVersionUID = 1L; 

      @Override 
      protected IResource getImageResource() { 
       return new DynamicImageResource() { 
        private static final long serialVersionUID = 1L; 

        @Override 
        protected byte[] getImageData(Attributes attributes) { 
         String myImageStr = new StringBuffer(
           WicketApplication.LOCAL_IMAGE_BASE). 
           append("help.png").toString(); 
         File file = new File(myImageStr); 
         try { 
          return Files.readBytes(file); 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         return null; 
        } 
       }; 
      } 

     }; 
     chartImage.setOutputMarkupId(true); 
     chartImage.setOutputMarkupPlaceholderTag(true); 
     return chartImage; 
    } 
} 

HTML:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns:wicket> 
<head> 

</head> 
<body> 
<form wicket:id="imageForm"> 
    <img width="100" height="133" title="Photo" wicket:id="orig_photo"/> 
</form> 
</body> 
</html> 
0

我想這可能是與如何檢票請求/響應生命週期。我在BeforeRender方法中有相同的代碼,它工作正常,但是當我將它複製到OnSubmit時,它不起作用。 我的解決方案是刷新OnSubmit中的頁面,而不是調用上述方法。