2010-01-16 1 views
8

내가 작성하는 경우Wicket이 html 요소의 ID를 변경하는 이유는 무엇입니까?

<form wicket:id="form" id="form> 

또는

<form wicket:id="form>... 

그런 다음 렌더링 된 HTML 페이지가 예를 들어, 새로 고침 할 때마다 다른 번호가 추가 아이디 '형태'를 보여줍니다

<form id="form7".... 

위젯 프레임 워크의 이러한 동작을 비활성화하는 방법이 있습니까? 나는 개찰구와 함께 일부터

답변

7

위젯을 사용할 때 대부분의 경우에 원하는 동작입니다. 동적 ID는 Ajax 비헤이비어가 구성 요소에 추가되거나 Ajax 응답에 추가되어 새로 고침 될 때 ID 충돌을 방지하기위한 것입니다. 이러한 상황에서 클라이언트 응답과 서버 측 상태가 모두 실제로 필요합니다. DOM 조회를위한 구성 요소의 ID가 필요한 외부 js 리소스가있는 경우 생성 된 ID를 전달하는 함수에 대한 js 호출을 생성하는 사용자 지정 wicket 구성 요소 동작을 추가하는 것이 좋습니다.

내가 설명하려고하는 것이 당신을 위킷의 숲으로 인도한다는 것을 깨닫습니다. 그러나 개찰구가 너를 위해 밖으로 열어주는 아작시 물건들에 더 행복했다.

+0

중에서'target.appendJavaScript (..) '와 같은 기능을 사용하면 자바 파일에 자바 스크립트를 작성하는 Wicket 규범입니까? –

+0

불행히도 다른 모든 것들과 마찬가지로, 그것은 다릅니다. JS 라이브러리 (예 : wicket-ajax.js)와 java 내에서 JS를 생성하는 예제가 있습니다. Wicket 소스 코드에는이 두 가지 예가 있어야합니다. 궁극적으로 표준 Ajax 비헤이비어에는 wicket-ajax.js 파일을 포함하는 표준 헤더 제공자가 포함됩니다.생성 된 JS를 볼 수있는 아약스 구성 요소 중 일부를 확인하십시오. 생성 된 JS 메서드 또는 추가 된 구성 요소에 첨부 할 것이 있습니다. – Matt

+0

@Monis : Java 코드에 JS의 최소 * 양을 넣는 것을 선호합니다. 일반적으로 별도의 .js 파일에있는 함수를 호출하는 것입니다. [한 예] (http://stackoverflow.com/a/8848464/56285). – Jonik

0

그것은 잠시왔다,하지만 난 개찰구가 아약스 요소를 사용하는 경우, 그 id의 자동 생성 (태그의 id 아닌 wicket:id) 것을 기억. Ajax 요소를 사용하지 않을 때 태그의 ID를 제어 할 수 있습니다. 귀하의 경우에는 코드가 없으므로 양식에서 AjaxButton 또는 Ajax*을 변경해야합니다.

+0

이러한 id 변경 문제는 클라이언트 측 물건에 내 css 스타일을 매핑하는 데 이러한 ID를 사용할 수없는 것처럼 요소 ID로 재생되는 자바 스크립트를 작성할 수 없습니다. –

+1

@ Monica Iqbal Wicket의 Ajax 후크 등을 직접 사용해야합니다. – Esko

+0

내가 맞춤 자바 스크립트를 작성할 수 없다는 것을 의미합니까? 개찰구가 지원하는 SOC 위반이 아닙니까? 왜냐하면 자바 스크립트는 클라이언트 측으로 간주되기 때문입니다. –

3

이것은 개찰판 기능입니다. 스타일과 구성 요소를 연결하는 데 클래스를 사용할 수 있습니다.

<form wicket:id="form" id="form> 

또한 시도해 볼 수 있습니다 (내가 한 적이 없습니다) setMarkupId. 나는 그것이 좋은 방법이라고 확신하지 못합니다.

+0

setMarkupId가 작동하지 않았습니다. –

+1

setMarkupId는 아래 대답을 참조하십시오. –

+0

아, 죄송합니다. setOutputMarkupId (true)로 잘못 읽었습니다. 죄송합니다. 감사합니다 @ 마이 칼 –

18

셀렌 테스트 프레임 워크로 자동 테스트를 쉽게하기 위해 우리 프로젝트에서 마크 업 ID를 손으로 광범위하게 설정했습니다. 확실히 작동합니다.

Component.setOutputMarkupId(true); // write id attribute of element to html 
Component.setMarkupId("someid"); // id attribute of element is "someid" 
0

네, 맞춤식 자바 스크립트를 작성할 수 있습니다. '위켓 방식'에 따라 구현해야합니다. 구성 요소, Ajax 호출 등을 사용자 정의 JavaScript로 꾸밀 수 있습니다. 그러면 모두 멋지게 재생됩니다.