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 케이스의 변수에 데이터를 저장하는 프로세스를 초기화 할 수 있습니까?