2009-10-28 2 views
4

페이지가 북마크 가능한 별칭에 마운트 된 wicket 웹 응용 프로그램이 있습니다. 페이지에는 제출 조치가있는 양식 오브젝트가 들어 있습니다.Wicket 양식에서 url 작업 제출을 제어하는 ​​방법은 무엇입니까?

문제는 양식이 페이지에 속하지만 action url에는 페이지 별칭이 포함되어 있지 않지만 위키 조치의 비밀스러운 형식으로 생성된다는 점입니다. 이 동작을 조정할 수있는 방법이 있습니까? page_alias/submit과 같은 링크가 있습니까?

... 
setRenderStrategy(IRequestCycleSettings.ONE_PASS_RENDER); 
mountBookmarkablePage("/resetpwd", ResetPasswordPage.class); 
... 
public ResetPasswordPage(final String id, final PageParameters parameters) { 
    final Form form = new StatelessForm(); 
    form.add(new Button("submit") { 
    public void onSubmit() { 
     ... 
     }); 
add(form); 

답변

1

당신이 그렇게 같은 HybridUrlCodingStrategy를 사용하여 요청 미신적 점보 많이 숨길 수 : 새 페이지로 리디렉션하지 않는 가정, 클릭이 제출할 때 다음

mount(new HybridUrlCodingStrategy("/resetpwd", ResetPasswordPage.class)); 

를 해당 URL

mysite.com/DocRoot/resetpwd

에서 변경됩니다

mysite.com/DocRoot/resetpwd.1

당신이 정말로 당신이 새로운 북마크 된 페이지를 만들 수mysite.com/DocRoot/resetpwd/submit되고 싶은 경우 나, ResetPasswordResult.class 말, 그에게 응답 페이지를 설정하고

당신은 또 다른 자신의 경우에 더 잘 맞는 것을보고 다른 인코딩 전략을 보일 수 있습니다 "/ resetpwd/제출"에 마운트 : 이 http://cwiki.apache.org/WICKET/url-coding-strategies.html

+0

이 부분이 약간 옆에있는 것 같습니다. 폼의'action'은 기본적으로 주변 페이지의 예쁜 URL을 사용하지 않을 것이지만 직렬화 된 폼 인스턴스를 검색하고'onSubmit' 핸들러를 호출하기위한 일부 Wicket 매개 변수는 예쁜 URL로 리디렉션 될 수 있습니다 . –

3

Form 대신 StatelessForm을 서브 클래스로 지정하면이 과정이 다소 지연됩니다. 오히려

행동 같은 것을하는 것보다 = "MyApp를/개찰 : 인터페이스 = 1 : eventEditor :: IFormSubmitListener은 :"양식을 포함하는 페이지와

이 북마크 된 URL에 장착하면 '예를 들어, 같은

행동 = 뭔가를 얻을 것이다 "MyApp를/마운트/경로/일부 /의 PARAMS/개찰 : 인터페이스 = 0 : eventEditor :: IFormSubmitListener ::"

이 그런 다음 당신에게 action 속성의 깨끗한 URL을 줄 것이다 true을 반환하는 encodeUrlInHiddenFields()을 무시할 수 WebApplication.init()

에 마운트를위한 MixedParamUrlCodingStrategy를 사용합니다.

하지만 위젯이 양식과 함께 작동하는 방식은 실제로 변경되지 않았습니다. 즉, 여전히 클라이언트의 마크 업에 Wicket 관련 상태 데이터가 있습니다. 이것이 왜 그렇게 어려운지에 대한 이유는 Wicket이 상태의 웹 앱을 구축하는 데 도움이된다는 것입니다.나는 Wicket이 장면 뒤에서 모델의 getter가 반환하기 전에 제출 된 양식 값을 비교하는 것과 같이 많은 것들을 처리한다는 것을 알아 차렸다. 단지 그것을 잘라낼 때 편안함을 거의 느끼지 못했다.

this blog post에 설명 된대로 Wicket을 사용하여 RESTful 웹 서비스를 제공 할 수 있습니다. 이 아이디어를 확장하는 도 있습니다. 이것은 UI 구성 요소를 기반으로하는 전체 구성 요소를 사용하지 않기 때문에 간단하게 작동하는 것 같습니다.

this post을 작성한 사람은 다른 문제가 있었지만 어쨌든 위켓 양식을 이해하는 데 도움이되었습니다.

+0

이 솔루션을 사용해 보았지만 encodeUrlInHiddenFields()를 재정의하면 Wicket은 양식 버튼을 클릭 할 때 실제로 onSubmit() 메서드를 호출하지 않습니다. 다시 그 메서드를 주석 경우 양식을 잘 작동합니다. encoreUrlInHiddenFields()와 StatelessForm의 조합에 대한 어떤 것만으로는 작동하지 않는 것 같습니다 (아마도 그들은 호환되지 않을 것입니다). – Trejkaz

+0

@Trejkaz 일부 디버깅을 기반으로, 요청 처리기는 'AbstractBookmarkableMapper # mapRequest '이유는 페이지 마운팅으로 되돌아가는 것 같다. 일부 논리에서는 이와 같이 오버라이드를 완전히 허용하려면 마운트 클래스를 변경해야 할 수도 있습니다. – rveach