2012-12-19 21 views
5
kullanarak bir sayfaya yönlendiriliyor

ADD PRODUCT numaralı bağlantıya sahip bir korsan sayfam var. Bağlantıyı tıklattığınızda ürün bilgilerini alan kalıcı bir pencere açılır.Wicket: setResponsePage

ProductAddPanel.java

public class ProductAddPanel extends Panel { 

private InlineFrame uploadIFrame = null; 
private ModalWindow window; 
private Merchant merchant; 
private Page redirectPage; 
private List<Component> refreshables; 

public ProductAddPanel(String id,final Merchant mct,ModalWindow window,List<Component> refreshables,Page p) { 
    super(id); 
    this.window = window; 
    merchant = mct; 
    redirectPage = p; 
    this.refreshables = refreshables; 
    setOutputMarkupId(true); 
} 

@Override 
protected void onBeforeRender() { 
    super.onBeforeRender(); 
    if (uploadIFrame == null) { 
     // the iframe should be attached to a page to be able to get its pagemap, 
     // that's why i'm adding it in onBeforRender 
     addUploadIFrame(); 
    } 
} 


// Create the iframe containing the upload widget 
private void addUploadIFrame() { 
    IPageLink iFrameLink = new IPageLink() { 
     @Override 
     public Page getPage() { 
      return new UploadIFrame(window,merchant,redirectPage,refreshables) { 
       @Override 
       protected String getOnUploadedCallback() { 
        return "onUpload_" + ProductAddPanel.this.getMarkupId(); 
       } 


      }; 
     } 
     @Override 
     public Class<UploadIFrame> getPageIdentity() { 
      return UploadIFrame.class; 
     } 
    }; 
    uploadIFrame = new InlineFrame("upload", iFrameLink); 
    add(uploadIFrame); 
} 

}

ProductAddPanel.html

<wicket:panel> 
<iframe wicket:id="upload" frameborder="0"style="height: 600px; width: 475px;overflow: hidden"></iframe> 
</wicket:panel> 

ben resim yüklemek için Iframe'i kullanıyorum. ProductPanel.html ürününe bir iframe ekledim. Ajax submit kullanarak dosya yüklemek mümkün olmadığından.

UploadIframe.java

protected void onSubmit(AjaxRequestTarget target, Form<?> form) { 
       DynamicImage imageEntry = new DynamicImage(); 

       if(uploadField.getFileUpload() != null && uploadField.getFileUpload().getClientFileName() != null){ 
        FileUpload upload = uploadField.getFileUpload(); 
        String ct = upload.getContentType(); 

        if (!imgctypes.containsKey(ct)) { 
         hasError = true; 
        } 

        if(upload.getSize() > maximagesize){ 
         hasError = true; 
        } 

        if(hasError == false){ 
         System.out.println("######################## Image can be uploaded ################"); 
         imageEntry.setContentType(upload.getContentType()); 
         imageEntry.setImageName(upload.getClientFileName()); 
         imageEntry.setImageSize(upload.getSize()); 
         if(imageEntry != null){ 
          try { 
           save(imageEntry,upload.getInputStream()); 
          } catch (IOException e) { 
           e.printStackTrace(); 
          } 
         } 
        }else{ 
         target.appendJavaScript("$().toastmessage('showNoticeToast','Please select a valid image!!')"); 
         System.out.println("#################### Error in image uploading ###################"); 
        } 
       }else{ 
        System.out.println("########################### Image not Selected #####################"); 
       } 

       MerchantProduct mp =new MerchantProduct(); 
       Product p = new Product(); 
       Date d=new Date(); 
       try { 

        p.setProductImage(imageEntry.getImageName()); 
        mp.setProduct(p); 

        Ebean.save(mp); 


       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

       for(Component r: refreshables){ 
        target.add(r); 
       } 

       window.close(target); 
       setResponsePage(MerchantProductPage.class); 
      } 

public void save(DynamicImage imageEntry, InputStream imageStream) throws IOException{ 
    //Read the image data 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    copy(imageStream,baos); 
    baos.close(); 
    byte [] imageData = baos.toByteArray(); 
    baos = null; 

    //Get the image suffix 
    String suffix = null; 
    if("image/gif".equalsIgnoreCase(imageEntry.getContentType())){ 
     suffix = ".gif"; 
    }else if ("image/jpeg".equalsIgnoreCase(imageEntry.getContentType())) { 
     suffix = ".jpeg"; 
    } else if ("image/png".equalsIgnoreCase(imageEntry.getContentType())) { 
     suffix = ".png"; 
    } 

    // Create a unique name for the file in the image directory and 
    // write the image data into it. 
    File newFile = createImageFile(suffix); 
    OutputStream outStream = new FileOutputStream(newFile); 
    outStream.write(imageData); 
    outStream.close(); 
    imageEntry.setImageName(newFile.getAbsolutePath()); 

    } 

    //copy data from src to dst 
    private void copy(InputStream source, OutputStream destination) throws IOException{ 
     try { 
       // Transfer bytes from source to destination 
       byte[] buf = new byte[1024]; 
       int len; 
       while ((len = source.read(buf)) > 0) { 
        destination.write(buf, 0, len); 
       } 
       source.close(); 
       destination.close(); 
       if (logger.isDebugEnabled()) { 
        logger.debug("Copying image..."); 
       } 
      } catch (IOException ioe) { 
       logger.error(ioe); 
       throw ioe; 
      } 
     } 

    private File createImageFile(String suffix){ 
     UUID uuid = UUID.randomUUID(); 
     File file = new File(imageDir,uuid.toString() + suffix); 
     if(logger.isDebugEnabled()){ 
      logger.debug("File "+ file.getAbsolutePath() + "created."); 
     } 
     return file; 
    } 
} 

}

ben bağlantısı mevcut olduğunda "Ürün Ekle" hangi ilk sayfaya yönlendirmek için setResonsePage() kullanıyorum. Böylece yenilenen sayfanın yeni ürün bilgilerine sahip olmasını sağlayın.

Sorunum, modal pencerenin window.close() 'da kapanmaması ve bu pencerenin içinde yenilenen sayfayı almamdır.

Benim gereksinim, Modal pencerenin kapanması ve sayfanın yenilenmesi gerektiğidir. Benim setResponsePage() içinde Parentpage.class iletiyorum.

Her türlü yardım ve tavsiye takdir edildi! Şimdiden teşekkürler.

cevap

5

Modal pencerenin açık olduğu ParentPage.class'da, getmod() hedefini eklediğim setWindowClosedCallback() yöntemini çağırdım; böylece, modal pencere kapandığında sayfanın yenilenmesi sağlanır. İşte aynı kodun kodu şu

modalDialog.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() 
    { 
      private static final long serialVersionUID = 1L; 

      @Override 
      public void onClose(AjaxRequestTarget target) 
      { 
       target.addComponent(getPage()); 
      } 
    }); 
İlgili konular