Wicket:使用 setResponsePage 重定向到Wicket 页面



我有一个检票口页面,上面有一个链接添加产品。单击链接后,将打开一个模式窗口,其中包含产品信息。

产品添加面板.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);
}

}

产品添加面板.html

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

我正在使用 Iframe 上传图像。我已经在我的产品面板.html中添加了一个 iframe。因为无法使用 ajax 提交上传文件。

上传Iframe.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;
    }
}

}

我正在使用setResonsePage()重定向到存在"添加产品"链接的初始页面。这样我就会得到包含新产品信息的刷新页面。

我的问题是模态窗口没有在 window.close() 上关闭,并且在该窗口中我正在获得刷新的页面。

我的要求是模态窗口应该关闭并且页面应该刷新。我正在传递 Parentpage.class 在我的 setResponsePage() 中。

任何帮助和建议表示赞赏!提前谢谢。

在打开模态窗口的 ParentPage 中.class我调用了 setWindowClosedCallback() 方法,其中我将 getPage() 添加到目标,以便在模态窗口关闭时页面将刷新。这是相同的代码

modalDialog.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() 
   { 
           private static final long serialVersionUID = 1L; 
           @Override 
           public void onClose(AjaxRequestTarget target) 
           { 
               target.addComponent(getPage()); 
           } 
   });

最新更新