제출 한 양식 값을 작성하기 위해 TextField에 모델 개체가 필요하기 때문에 왜 TextField 모델을 분리하려고하는지 명확하지 않습니다. PropertyModel에서 position
을 분리하면 사용자가 양식을 제출 한 후에 TextField에 "제목"값을 쓸 수있는 위치가 없습니다. position
의 위치,로드 된 위치 및 요청주기 사이에 분리해야하는 이유에 대한 자세한 정보를 제공 할 수 있습니다. 일반적으로 양식 구성 요소에 값을 쓸 수있는 안전하게 직렬화 할 수있는 모델 객체를 사용하는 것이 일반적입니다.
각 요청이 끝날 때 PropertyModel의 모델 객체를 분리해야하는 경우 PropertyModel을 LoadableDetachableModel에 연결하십시오. LDM은 제공된 load()
메소드를 기반으로 각 요청주기마다 새로운 모델 객체를로드 한 다음 모델 객체 직렬화를 방지하기 위해 분리시 해당 모델 객체에 대한 참조를 자동으로 무효화합니다. LoadableDetachableModel<Position>
을 PropertyModel의 모델 객체로 사용하면 PropertyModel이 LoadableDetachableModel을 자동으로 분리하여 position
객체의 직렬화를 피할 수 있습니다.
예제 에서처럼 detach()
을 명시 적으로 호출 할 필요가 없습니다. 개찰은 페이지 계층 구조의 모든 구성 요소의 기본 모델을 자동으로 분리합니다. "기본 모델"은 super(...)
체인을 통과하여 결국 이라는 인수가 Component(...)
생성자 중 하나가되는 모델을 의미합니다.
요청 처리가 끝나면 페이지에서 detach()
을 자식에 대해 호출하고 해당 자식은 자식에 detach()
을 호출합니다. 이 메서드 (Component에 정의되어 있음)는 detachModels()
을 호출하며 이는 Component의 기본 모델을 분리합니다.
일반적으로 두 개 이상의 모델을 사용하는 표준 Wicket 구성 요소는 detachModels
동안 추가 모델을 분리합니다. 예를 들어, DropDownChoice에 모델을 선택 값을 가져 오거나 설정하기 위해 전달하고 선택 목록의 모델을 전달하면 DropDownChoice는 각 요청이 끝날 때 두 모델을 자동으로 분리합니다. 이는 AbstractChoice#detachModel()
이 설정되어있는 경우 choices
모델을 찾아 분리하기 때문입니다. 그런 다음 CompoundPropertyModel가 detachModels
에 의해 자동으로 분리 될 수
Form<User> userForm = new Form<User>("userForm", new CompoundPropertyModel<User>(new DetachableUserModel(...));
가 있다면 예를 들어, 그래서
체인 연결 모델은, 자신의 체인 모델을 분리하고, 그 차례로 DetachableUserModel를 분리합니다.
모델을 수동으로 분리하는 것에 대해 걱정할 필요가있는 부분은 코드에서 일부 구성 요소의 기본값 model
이 아닌 추가 모델을 사용하는 경우입니다. 둘 이상의 모델 객체가있는 새로운 유형의 구성 요소를 만드는 경우 문제가 될 수 있습니다. 귀하의 경우에는
@Martin 또한 폼이 필드가 아니더라도 페이지 사이에 하나 이상의 다른 구성 요소가있는 경우 페이지에 추가됩니다. 그리고이 페이지는 확실히 연재 될 것입니다. – Nicktar
@ 닉 타르 - 좋은 지적입니다. 나는 이것을 통합하기위한 대답을 업데이트했다. –