2012-12-19 23 views
5

Tôi có trang wicket có liên kết THÊM SẢN PHẨM. Khi nhấp vào liên kết, cửa sổ phương thức mở sẽ lấy thông tin sản phẩm.Wicket: chuyển hướng đến trang wicket bằng cách sử dụng 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> 

Tôi đang sử dụng một khung nội tuyến để tải lên hình ảnh. Tôi đã thêm iframe vào ProductPanel.html của mình. Vì không thể tải tệp lên bằng cách gửi ajax.

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; 
    } 
} 

}

Tôi đang sử dụng setResonsePage() để chuyển hướng đến trang đầu tiên mà "Add Product" liên kết là hiện tại. Để tôi có được trang được làm mới có thông tin sản phẩm mới.

Vấn đề của tôi là cửa sổ phương thức không đóng trên window.close() và bên trong cửa sổ đó tôi đang nhận được trang được làm mới.

Yêu cầu của tôi là cửa sổ Modal sẽ đóng và trang sẽ được làm mới. Tôi đang đi qua Parentpage.class trong setResponsePage() của tôi.

Bất kỳ trợ giúp và lời khuyên nào được đánh giá cao! Cảm ơn trước.

Trả lời

5

Trong lớp ParentPage.class mà trên đó cửa sổ phương thức được mở, tôi gọi phương thức setWindowClosedCallback(), trong đó tôi thêm getPage() để nhắm mục tiêu sao cho trang sẽ làm mới khi cửa sổ phương thức bị đóng. Đây là mã cho cùng một số

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

      @Override 
      public void onClose(AjaxRequestTarget target) 
      { 
       target.addComponent(getPage()); 
      } 
    }); 
Các vấn đề liên quan