3

ADDPRODUCTのリンクがある改札ページがあります。リンクをクリックすると、製品情報を取得するモーダルウィンドウが開きます。

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>

Iframeを使用して画像をアップロードしています。ProductPanel.htmlにiframeを追加しました。ajaxsubmitを使用してファイルをアップロードすることはできないためです。

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

}

setResonsePage()を使用して、「製品の追加」リンクが存在する最初のページにリダイレクトしています。更新されたページに新しい製品情報が表示されるようにします。

私の問題は、モーダルウィンドウがwindow.close()で閉じておらず、そのウィンドウ内でページが更新されていることです。

私の要件は、モーダルウィンドウを閉じてページを更新することです。setResponsePage()でParentpage.classを渡します。

どんな助けやアドバイスもありがたいです!前もって感謝します。

4

1 に答える 1

2

モーダル ウィンドウが開いている ParentPage.class で、ターゲットに getPage() を追加する setWindowClosedCallback() メソッドを呼び出して、モーダル ウィンドウを閉じたときにページが更新されるようにしました。ここに同じコードがあります

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

           @Override 
           public void onClose(AjaxRequestTarget target) 
           { 
               target.addComponent(getPage()); 
           } 
   });
于 2012-12-24T04:51:26.370 に答える