2011-04-19 2 views
0

모달 자바 스크립트 확인 상자가 있습니다. 버튼 클릭, 즉 취소 버튼 또는 확인 버튼에 따라 상위 페이지의 일부 구성 요소를 새로 고침하고 싶습니다. 그러나 불행히도 그것은 작동하지 않습니다. 코드에서 볼 수 있듯이 두 개의 텍스트 필드에 값을 ""설정하고 패널을 숨기고 드롭 다운의 선택된 옵션을 0으로 설정하려고합니다. 이것은 일어나지 않고 있으며, 구성 요소는 해제되지 않은 상태로 남아 있습니다.모달 창에서 상위 페이지의 구성 요소 새로 고침

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

그리고 voilà. 감사.

0

자바 스크립트 대신 개찰판 모델을 사용하면 더 나은 행운을 누릴 수 있습니다. 이 같은 것을 : @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

. 내 경우에는 setVisible (false)를 사용하면 javascript로 볼 수 없다는 사실을 경험했기 때문에 setVisible (false) userAssignmentInfoPanel 또는 other를 설정할 수 없다. 이 페이지의 코드에는 이와 같은 javascript가 있습니다. –

+1

Component.setOutputMarkupPlaceholderTag (true); – tetsuo

관련 문제