2010-06-02 4 views
4

현재 Wicket을 평가 중입니다. 어떻게 작동하는지 파악하려고합니다.Wicket : 패널이나 구성 요소가 정형화 된 코드없이 양식을 제출할 때 반응 할 수 있습니까?

양식 제출 및 패널 (또는 다른 구성 요소)에 관한 질문이 있습니다. ajax를 사용하여 as-you-type 유효성 검사를 수행하는 텍스트 필드가 포함 된 사용자 지정 위젯 패널을 상상해보십시오. 이 패널은 양식에 추가됩니다. 패널이 양식 제출에 어떻게 반응 할 수 있습니까 (javascript/ajax를 사용할 수 없기 때문에).

저는 현재 하나의 솔루션에 대해서만 인식하고 있습니다 : 폼의 onSubmit() 메소드 내에서 패널의 메소드 호출. 그러나 이것은 패널을 사용하는 모든 양식의 onSubmit()에 보일러 플레이트 코드를 추가해야하기 때문에 여기에서 "재사용 가능한"접근 방식처럼 보이지 않습니다. 패널을 사용하는 모든 개발자는 이것을 알고 있어야합니다.

여기 내 질문이옵니다. 패널/구성 요소가 양식을 어떤 방식 으로든 "검색"할 수있는 방법이 있습니까? 아니면이 옆에 다른 해결책이 있습니까?

감사합니다.

답변

0

프레임 워크는 양식 구성 요소를 투명하게 처리합니다. 양식은 상위 폼에 직접 추가되지 않은 경우에도 하위 폼 구성 요소를 인식합니다.

+0

양식 구성 요소가 자녀를 알고 있음을 알고 있습니다. 그러나 제 질문은 다른 방향이었습니다. 패널이 양식 제출시 어떻게 대응할 수 있습니까? – MRalwasser

1

글쎄, 당신은 단순히 다음을 수행 할 수 :이 의미

Panel{ 
Form{ 
    onSubmit(){ 
    Panel.this.onSubmit(); 
    } 
} 

protected void onSubmit(){} 

} 

을 ... 만에 상관없이이 글은 무엇 태그의 onsubmit 양식을 무시할 필요가 없다하여 패널을 확장하는 패널 html이 해당 메소드를 호출합니다. 이렇게하면 패널을 확장하고 각 양식에 대해 하나의 메서드 만 재정의 할 수 있습니다.

+0

나는 사용자 정의 패널을 확장하는 것에 대해 이야기하지 않습니다. 나는 상용구 코드없이 그들을 사용하는 것에 대해 이야기하고있다. – MRalwasser

0

해당 패널 내부에 양식이 있습니다. 이렇게하면 외부 Form을 사용하지 않고도 Panel을 재사용 할 수 있습니다. Forms는 HTML 안에 서로 중첩 될 수 없기 때문에 내부 Form을 투명하게 스왑하지만 각 내부 Forms가 폼 처리 (validation, ..)의 일부분을 차지하도록합니다.

패널에서 양식의 OnSubmit() 기능을 재정의 할 수 있습니다. 개찰이 당신을 위해 그것을 부를 것입니다.

0

"반응"이란 무엇입니까? 나는 Wicket으로 최근에 시작한 바 있지만, FWIK 양식 제출은 모델의 구성 요소를 업데이트 한 다음 onSubmit()을 호출합니다.이 부분을 덮어 쓰면 특별한 조치가 취해집니다. Wicket in Action 장을 참조하십시오.

그런 다음 페이지 (및 그 구성 요소)가 업데이트 된 모델을 사용하여 다시 렌더링되므로 기본적으로 제출자는 실제로 코드에 반응하여 "반응"합니다 .

양식의 구성 요소에 언급 된 경우에는 CompoundPropertyModel을 살펴보십시오.

6

패널에 org.apache.wicket.markup.html.form.IFormModelUpdateListener을 구현하고 포함 양식을 제출하고 유효성 검사를 통과 할 때 updateModel() 메서드를 호출해야합니다.

Wicket In Action blog의 개찰 작가 중 한 명이 이것을 사용하는 좋은 예가 있습니다.

+0

여전히 올바른 방법입니까? 일반적으로 이것은 나를 위해 너무 작동합니다. 그러나 FormTester와 그 submit 메소드를 사용할 때 패널의 updateModel은 호출되지 않습니다. 너는 어떤 생각을 가지고 있니? –

+0

내가 아는 한, 이것은 여전히 ​​괜찮습니다. 인터페이스는 아직 Wicket 6에있다 (최소한 Javadoc에서는). 하지만 아직 Wicket 6을 사용하지 않아서 정말 확신 할 수 없습니다. –

0

구현 IFormSubmitListner 및 IFormModelUpdateListener를 구현하면 양식을 전송하는 동안 각 메서드를 호출해야합니다.

그러나 양식을 제출 한 후 일부 처리를 수행하려는 경우 사용자가 직접 상용구 코드를 직접 작성하는 것이 좋습니다.

관련 문제