2011-04-19 3 views
0

У меня есть модальное окно, симуляция окна подтверждения JavaScript. В зависимости от нажатия кнопки, то есть кнопки отмены или кнопки ok, я хочу обновить какой-либо компонент родительской страницы. Но, к сожалению, он не работает. Как вы можете видеть из кода, я хочу установить значения для двух текстовых полей в «», скрыть панель и установить выбранную опцию выпадающего списка на ноль. Этого не происходит, компоненты остаются невосстановленными.Обновить компонент родительской страницы при закрытии модального окна

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

    } 
} 

Как это сделать?

+0

Можете ли вы рассказать о «Не работает»? – jzd

+0

@jzd Я отредактировал сообщение для получения дополнительной информации. –

ответ

1

Я решил проблему. Я даю решение, чтобы оно могло помочь будущим пользователям. страница модальное окно:

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

    } 
} 

Здесь ParentPage страница, из которой создается модальное окно. В ParentPage у меня есть поле isCancelButtonClicked и его getter и setter. На этой странице я установил

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

И вуаля. Благодарю.

0

Вам, скорее всего, повезет, если вы используете калитки вместо javascript. Что-то вроде этого: @Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
// I am trying to refresh the component here
userAssignmentInfoPanel.setVisible(false);
target.add(userAssignmentInfoPanel);
choice.getModelObject().setSelected(0);
target.add(choice);
scheduledTimeField.setModelObject("");
deadLineField.setModelObject("");
target.add(scheduledTimeField);
target.add(deadLineField);
}

+0

спасибо. В моем случае я не могу установитьVisible (false) userAssignmentInfoPanel или другое, поскольку я испытал, что если на компоненте я использую setVisible (false), то он не может быть видимым javascript. Код этой страницы имеет javascript. –

+1

Component.setOutputMarkupPlaceholderTag (true); – tetsuo

Смежные вопросы