2009-11-13 2 views
1

저는 Spring을 처음 접했고 Spring을 사용하는 새로운 프로젝트로 코드를 옮기기위한 몇 가지 기본 지침을 받았고 SimpleFormController (사용자에게 지시 한)에 문제가 있습니다.SimpleFormController help

페이지가 있고로드 할 때 DB에서 데이터가 채워진 드롭 다운이 있습니다. "메시지"목록이 DB에서 검색되어 JSP로 속성으로 전달 된 다음 드롭 다운이 채워집니다. 이러한 "메시지"중 하나가 선택되면 드롭 다운 아래에 양식이 나타나고 해당 데이터가 채워집니다. 페이지가로드 될 때 모든 데이터가 리턴되므로 DB 호출이 수행되지 않습니다. 이것은 모두 jQuery로 끝난다. 업데이트 버튼을 클릭하면 양식 요소를 변경하고 DB에 저장할 수 있습니다.

현재 코드는 포틀릿이며 doView 메소드에는 메시지를 검색하여 JSP에 전달하는 로직이 포함되어 있습니다. processAction 메서드는 변경 내용을 저장합니다.

SimpleFormController의 어떤 메소드를 알아낼 수 없습니다. 나는 업데이트를 위해 onSubmitAction을 사용하라는 말을 들었지만 나에게 무엇을해야하는지 알려주는 사람은 페이지를 처음로드 할 때 데이터를 가져 오는 데 사용하는 방법을 모르거나, 데이터/모델을 저장하고 JSP. Spring 명령/양식을 사용하여 변경 사항을 메시지로 저장하지만 드롭 다운 및 양식 필드를 채우는 데 사용하지는 않습니다.

어리석은 질문 인 것처럼 사과하면 사과드립니다. 나는 자습서를 찾고 있었지만 필요한 답을 찾지 못했습니다 - 질문이 무엇인지 확신 할 수 없기 때문에 가능합니다. 사전에 어떤 도움

덕분에 캐롤라인

답변

1

폼 백킹 개체가 폼에 바인딩되지만 페이지로드시 폼의 초기 데이터가로드되지 않는다고 생각됩니다 (formBackingObject 메서드를 사용하는 경우). 대신, 폼 백업 오브젝트 ("메시지"목록)에 들어 가지 않는 다른 데이터를 미리로드하기를 원합니다. 폼은 해당 드롭 다운을 기반으로 Ajax를 통해 초기화됩니다.

그래서 내가 사용하고자하는 것은 referenceData 메소드입니다. 이렇게하면 JSP에서 액세스 할 수 있도록 원하는 모든 오브젝트를 요청에 넣을 수 있습니다. 지도를 만들고 "messageList"키가있는 Message 객체 목록을지도에 삽입합니다. 그런 다음 $ {messageList}를 참조하여 JSP 내에서 메시지를 얻을 수 있습니다.

+0

페이지로드시 referenceData 메소드가 자동으로 호출됩니까? 2 개의 컨트롤러를 생성하여 절반의 솔루션을 얻었습니다. 하나는 페이지가로드 될 때 (abstractController)이고 handleRenderRequestInternal 메서드가 구현되었습니다. 이것은 내 데이터가 다시 돌아와 내 드롭 다운을 채웠다에서 일했습니다. 그러나 데이터를 수정하고 업데이트를 히트하면 내 SimpleFormController의 onSubmitAction에 들어 가지 않습니다. 대신 내 handleRenderRequestInternal로 돌아갑니다. 하나의 컨트롤러 (SimpleForm)에서 두 메서드를 모두 수행하는 것이 좋지만 어떤 메서드가 페이지로드에서 호출되는지 확실하지 않습니다. – Caroline

+0

SimpleBackgroundObject 및 referenceData는 모두 SimpleFormController에서 페이지로드시 호출됩니다. http://longgoldenears.blogspot.com/2007/07/simpleformcontroller-workflow-lifecycle.html에서 SimpleFormController "lifecycle"에 대한 매우 유용한 차트가 있습니다. –

+0

오케이, 이제 referenceData를 얻었습니다. 내 문제는 제출할 때입니다. 내 양식은 referenceData 메서드로 이동하고 onSubmitAction 메서드로 이동하지 않습니다. – Caroline

0

나는 한 동안 이런 짓을하지만, 내가 정확히 기억한다면 보자하지 않았습니다. SimpleFormController는 표시 할 객체를 첨부합니다. 이 객체의 필드가 요청에 자동으로 표시되도록합니다 (최소한 간단한 것).

개체 형식을 SimpleFormController에 연결하려면 setCommandNamesetCommandClass 메서드를 사용해야합니다.이 메서드는 생성자에서 호출하기 위해 사용했습니다. formBackingObject 메서드를 구현해야합니다.이 메서드는 예를 들어 DB에서 개체를 검색하고 컨트롤러에 설정합니다.

제출물을 처리하려면 onFormSubmit을 구현해야합니다. html 양식의 모든 새 값을 가진 명령 객체에 액세스 할 수 있습니다 (Spring은 요청 값을 명령 객체에 자동으로 바인딩합니다). 이 방법으로 데이터베이스에 변경 사항을 적용하려고 할 것입니다.

요청의 명령 개체 필드와 다른 매개 변수를 추가 할 수 있습니다. 특히, handleRequest이 먼저 호출되고, showForm이 마지막으로 호출된다는 것을 아는 것이 유용합니다. 문서를 점검 할 필요가있다. 스프링 녀석은 특별한 매개 변수를 추가하는 특별한 방법을 추천한다. (그것이 무엇인지 기억하지 못한다.

봄에 jsp를 표시 할 때 해석 방법을 알 수없는 특수한 객체가있는 경우 (요일 중 하나의 체크 박스에서 선택된 요일로 변환 된 바이트 값이 있음) 자신의 바인더를 작성하고 initBinder 메소드를 구현하여 링크 된 매개 변수에 첨부하십시오.

희망이 도움이됩니다. (대략 8 개월간) 이것을 사용했기 때문에 상황이 바뀔 수도 있었지만, 스프링 코드 & 문서를 살펴 보았을 때 아이디어는 매우 간단했습니다.