2010-08-06 1 views
0

필자는 TextField에서 required가 true이고 Textfield에 null 값으로 제출할 때이 문제를 설명하기 위해 간단한 wicket 웹 응용 프로그램을 만듭니다. 피드백 패널 메시지 (이 소리 좋은)하지만 내 유스 케이스 모달 창에서 내 데이터를 가져올 및이 양식을 다시 보내려면 AjaxRequestTarget 수 없습니다 TextField 데이터를 업데이트하고 다른 textfield.i 아무것도 입력 할 수 없습니다. 해결할 수 없습니다 이 problem.please 도움 me.but 때 다시 웹 애플 리케이션을 실행하고 텍스트 필드에 내 데이터를 설정할 수있는 모달 창을 사용합니다.Wicket 1.4.9는 피드백 오류 후 모달에서 AjaxRequestTarget을 사용할 수 없습니다!

public class User implements Serializable { 

private String username; 
private String password; 

public User(String username, String password){ 
    this.username = username; 
    this.password = password; 
} 

public User() { 
    // TODO Auto-generated constructor stub 
} 

public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 
} 

마이 페이지

public class FormPage extends WebPage{ 

private User user; 
private ModalWindow modal; 
private TestForm form; 

public FormPage() { 
    user = new User(); 

    modal = new ModalWindow("modal"); 
    modal.setOutputMarkupId(true); 
    modal.setInitialHeight(300); 
    modal.setInitialWidth(300); 
    add(modal); 

    form = new TestForm("form"); 
    add(form); 
} 

private class TestForm extends Form { 

    private FeedbackPanel feedback; 
    private TextField<String> username; 
    private AjaxLink popupButton; 
    private AjaxButton submitButton; 
    private TextField<String> password; 

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

     feedback = new FeedbackPanel("feedback"); 
     feedback.setOutputMarkupId(true); 
     add(feedback); 

     username = new TextField<String>("username", new PropertyModel<String>(FormPage.this, "user.username")); 
     username.setOutputMarkupId(true); 
     username.setRequired(true); 
     add(username); 

     password = new TextField<String>("password", new PropertyModel<String>(FormPage.this, "user.password")); 
     password.setOutputMarkupId(true); 
     password.setRequired(true); 
     add(password); 

     popupButton = new AjaxLink("popupButton") { 

      @Override 
      public void onClick(AjaxRequestTarget target) { 
       UserPopup popup = new UserPopup(modal.getContentId()) { 

        @Override 
        public void onSuccess(AjaxRequestTarget target, User user) { 
         FormPage.this.user = user; 
         target.addComponent(username); 
         target.addComponent(password); 
         modal.close(target); 
        } 
       }; 
       modal.setContent(popup); 
       modal.show(target); 
      } 
     }; 
     add(popupButton); 

     submitButton = new AjaxButton("submitButton", this) { 

      @Override 
      protected void onSubmit(AjaxRequestTarget target, Form<?> form) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      protected void onError(AjaxRequestTarget target, Form<?> form) { 
       target.addComponent(feedback); 
      } 
     }; 
     add(submitButton); 

    } 

} 

}

내 팝업 :

public abstract class UserPopup extends Panel{ 

private User user; 

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

    user = new User("name","pass"); 

    add(new AjaxLink("userLink"){ 

     @Override 
     public void onClick(AjaxRequestTarget target) { 
      onSuccess(target, user); 
     } 


    }); 
} 

public abstract void onSuccess(AjaxRequestTarget target,User user); 

내 샘플 코드

사용자 엔티티입니다

}

답변

0

시도해보십시오. onSuccess 메소드에서 사용자 이름 및 비밀번호 필드의 모델 객체를 설정합니다.

@Override 
       public void onSuccess(AjaxRequestTarget target, User user) { 
        FormPage.this.user = user; 
        username.setModelObject(user.getUsername()); 
        password.setModelObject(user.getPassword()); 
        target.addComponent(username); 
        target.addComponent(password); 
        modal.close(target); 
       } 

필자는 유사한 사용법을 사용했다. 당신은 영어로 어려움을 겪고있는 것처럼 보입니다. 그래서 나는 당신의 질문을 잘 이해하지 못했을 것입니다.

아래 코드는 비슷한 문제에 있습니다.

public class ReleaseDetailPanel extends Panel { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    private Form<Release> frmRelease ; 

    private TextField<String> txtName ; 

    private TextArea<String> txtDescription; 

    private TextField<Project> txtProject; 

    private AjaxLink<String> lnkLookupProject ; 

    private ModalWindow mdProjectLookup ; 

    @Inject 
    private Dao dao ; 


    public ReleaseDetailPanel(String id, Release release) { 
     super(id); 

     frmRelease = new Form<Release>("frmRelease", new Model<Release>(release)){ 
      /** 
      * 
      */ 
      private static final long serialVersionUID = 8075962334880413343L; 

      protected void onSubmit() { 
       Release r = this.getModelObject(); 
       dao.save(r); 
      }; 
     }; 

     txtName = new TextField<String>("txtName", new PropertyModel<String>(release, "name")); 
     frmRelease.add(txtName); 

     txtDescription = new TextArea<String>("txtDescription", new PropertyModel<String>(release, "description")); 
     frmRelease.add(txtDescription); 

     txtProject = new TextField<Project>("lstProject", new PropertyModel<Project>(release, "project")); 
     frmRelease.add(txtProject); 
     txtProject.setEnabled(false); 
     txtProject.setOutputMarkupId(true); 

     lnkLookupProject = new AjaxLink<String>("lnkLookupProject"){ 
      /** 
      * 
      */ 
      private static final long serialVersionUID = -1014715631761886636L; 

      @Override 
      public void onClick(AjaxRequestTarget target) { 
       mdProjectLookup.show(target); 
      } 


     }; 
     frmRelease.add(lnkLookupProject); 
     add(frmRelease); 

     mdProjectLookup = new ModalWindow("mdProjectLookup"); 
     mdProjectLookup.setContent(new ProjectListPanel(mdProjectLookup.getContentId()){ 

      @Override 
      public Component getGridMenu(String id) { 

       return new Label(id); 
      } 

      @Override 
      public Component getGridItemMenu(String componentId, final Project project) { 
       return new LabeledAjaxFallbackLink(componentId, "Select"){ 

        /** 
        * 
        */ 
        private static final long serialVersionUID = 1L; 

        @Override 
        public void doClick(AjaxRequestTarget target) { 
         txtProject.setModelObject(project); 
         target.addComponent(txtProject); 
         mdProjectLookup.close(target); 
        } 


       }; 

      } 

     }); 

     add(mdProjectLookup); 
    }