2012-10-17 2 views
0
final Address address = new Addres(); 
Form form = new Form("addressInputForm"); 
this.add(form); 
form.setOutputMarkupId(true); 

FormComponent fc; 

fc = new RequiredTextField("street", new AddressModel(new Model(address), AddressModelType.STREET_MODEL)); 
fc.add(StringValidator.maximumLength(30)); 
fc.setLabel(new ResourceModel("label.street")); 
form.add(fc); 

form.add(new AjaxButton("submitAddressInput", form){ 

     @Override 
     protected void onSubmit(AjaxRequestTarget target, Form<?> form){     
      System.out.println(address.toString()); 
     } 

     @Override 
     protected void onError(AjaxRequestTarget target, Form<?> form){ 
      // 
     } 
    }); 

AjaxEventBehavior behavior = new AjaxEventBehavior("keyup"){ 

     @Override 
     protected void onEvent(AjaxRequestTarget target) { 
      System.out.println(address.toString()); 
     } 
    }; 

    form.add(behavior); 

문제점에 대해 약간의 예제를 작성했습니다.Wicket 6.1 AjaxEventBehavior 및 양식 구성 요소 모델

기본적으로 사용자가 "street"필드에 값을 삽입하면 코드에서 예상 한대로 동작을 활성화하고 onEvent() 메서드를 실행합니다. onEvent() 변수 주소를 출력합니다. 불행히도 address.street 값은 NULL입니다. 그래서 그것은 "Street : NULL"을 출력합니다.

그러나 사람이 데이터를 제출하는 아약스 버튼을 클릭하면 Wicket은 양식의 모든 데이터를 AddressModel을 통해 address 변수로로드합니다. 거기에서 최종 결과는 예를 들면 "거리 : Bond street"일 것이다.

제 질문은 어떻게 AjaxEventBehavior 케이스의 변수에 데이터를 저장하는 프로세스를 초기화 할 수 있습니까?

답변

2

구성 요소의 값을 제출할 AjaxFormComponentUpdatingBehavior를 사용하십시오.

관련 문제