javawicket

Refresh Component of Parent Page on Modal Window closing


I have a modal window, simulation JavaScript confirm box. Depending on button click i.e., cancel button or ok button I want to refresh some component of the parent page. But unfortunately it is not working. As you can see from the code, I want to set values to the two textfields to "", hide a panel and set selected option of dropdown to zero. This is not happening, the components are remaining unrefreshed.

    public class ModalConfirmWindow extends WebPage {

    private ModalWindow modalConfirmWindow;
    private UserAssignmentInfoPanel userAssignmentInfoPanel;
    private DropDownChoice choice;
    private TextField scheduledTimeField;
    private DateTextField deadLineField;
    private int numberOfConflictingDays;

    public ModalConfirmWindow(ModalWindow modalConfirmWindow, UserAssignmentInfoPanel userAssignmentInfoPanel, DropDownChoice choice, TextField scheduledTimeField, DateTextField deadLineField, int numberOfConflictingDays) {
        this.modalConfirmWindow = modalConfirmWindow;
        this.userAssignmentInfoPanel = userAssignmentInfoPanel;
        this.choice = choice;
        this.scheduledTimeField = scheduledTimeField;
        this.deadLineField = deadLineField;
        this.numberOfConflictingDays = numberOfConflictingDays;
        add(new ModalConfirmWindowForm("form"));
    }

    private class ModalConfirmWindowForm extends Form {

        private static final long serialVersionUID = 10090L;

        public ModalConfirmWindowForm(String id) {
            super(id);

            add(new Label("value", " " + numberOfConflictingDays +" ").add(new SimpleAttributeModifier("style", "color: red")));
            add(new AjaxButton("cancelButton", this) {

                @Override
                protected void onSubmit(AjaxRequestTarget target, Form form) {
                                            // I am trying to refresh the component here
                    String javaScript = "document.getElementById('"+ userAssignmentInfoPanel.getMarkupId() +"').display = 'none';" +
                                        "document.getElementById('"+ choice.getMarkupId() +"').options[0].selected = 'selected';" +
                                        "document.getElementById('"+ scheduledTimeField.getMarkupId() +"').value = \"\";" +
                                        "document.getElementById('"+ deadLineField.getMarkupId() +"').value = \"\";";                                       
                    //target.appendJavascript(javaScript);
                    //scheduledTimeField.add(new SimpleAttributeModifier("value", ""));
                    //target.addComponent(scheduledTimeField);
                    //modalConfirmWindow.close(target);
                    modalConfirmWindow.close(target);
                    target.appendJavascript(javaScript);
                }
            });
            add(new AjaxButton("okButton", this) {

                @Override
                protected void onSubmit(AjaxRequestTarget target, Form form) {
                    modalConfirmWindow.close(target);
                }
            });
        }

    }
}

How can I do this?


Solution

  • I have solved the problem. I am giving the solution so that it may help future users. The modal window page is :

        public class ModalConfirmWindow extends WebPage {
    
        private Page parentPage;
        private ModalWindow modalConfirmWindow;    
        private int numberOfConflictingDays;
    
        public ModalConfirmWindow(Page parentPage, ModalWindow modalConfirmWindow, int numberOfConflictingDays) {
            this.parentPage = parentPage;
            this.modalConfirmWindow = modalConfirmWindow;        
            this.numberOfConflictingDays = numberOfConflictingDays;
            add(new ModalConfirmWindowForm("form"));
        }    
    
        private class ModalConfirmWindowForm extends Form {
    
            private static final long serialVersionUID = 10090L;
    
            public ModalConfirmWindowForm(String id) {
                super(id);
    
                add(new Label("value", " " + numberOfConflictingDays +" ").add(new SimpleAttributeModifier("style", "color: red")));
                add(new AjaxButton("cancelButton", this) {
    
                    private static final long serialVersionUID = 10091L;
    
                    @Override
                    protected void onSubmit(AjaxRequestTarget target, Form form) {        
                        ((ParentPage)parentPage).setCancelButtonClicked(true);
                        modalConfirmWindow.close(target);
                    }
                });
                add(new AjaxButton("okButton", this) {
    
                    private static final long serialVersionUID = 10092L;
    
                    @Override
                    protected void onSubmit(AjaxRequestTarget target, Form form) {
                        ((ParentPage)parentPage).setCancelButtonClicked(false);
                        modalConfirmWindow.close(target);
                    }
                });
            }
    
        }
    }
    

    Here the ParentPage is the page from which the modal window is generated. In the ParentPage I have a field isCancelButtonClicked and its getter and setter. In that page I have set

                    modalConfirmWindow.setCloseButtonCallback(new ModalWindow.CloseButtonCallback() {
    
                        private static final long serialVersionUID = 10093L;
    
                        public boolean onCloseButtonClicked(AjaxRequestTarget target) {
                            ParentPage.this.isCancelButtonClicked = true;
                            return true;
                        }
                    });
                    modalConfirmWindow.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
    
                        private static final long serialVersionUID = 10094L;
    
                        public void onClose(AjaxRequestTarget target) {
                            if (ParentPage.this.isCancelButtonClicked) {
                                String javascript = "document.getElementById('"+ scheduledTimeField.getMarkupId() +"').value = \"\";" +
                                                    "document.getElementById('"+ deadLineField.getMarkupId() +"').value = \"\";" +
                                                    "document.getElementById('"+ totalLabel.getMarkupId()+"').style.display = 'none';" +
                                                    "document.getElementById('"+ choice.getMarkupId() +"').options[0].selected = 'selected';" +
                                                    "document.getElementById('"+ choice.getMarkupId() +"').disabled = true;" +
                                                    "document.getElementById('"+ userAssignmentInfoPanel.getMarkupId() +"').style.display = 'none';";
                                target.appendJavascript(javascript);
                            }                            
                        }
                    });
    

    And voilĂ . Thanks.