문제

나는 struts와 약간 유사한 MVC 프레임워크를 사용하고 있습니다.따라서 내 애플리케이션에 "Edit Store" 링크가 있다고 가정하면 URL은 다음과 같습니다.

http://localhost:9080/test?action=editStore&storeNum=10

이제 action은 실행될 내 Action(Struts Action과 유사)을 결정합니다.여기서 해당 작업은 다음과 같습니다.EditStoreAction.이를 클릭하면 편집할 수 있는 상점의 다양한 속성이 포함된 팝업이 열립니다.

내 질문은 다음과 같습니다.내 행동을 어떻게 작성하나요?이 맥락에서 두 가지 작업을 작성해야 합니까?

  1. edit.jsp를 렌더링하는 editstoreacect
  2. edit.jsp의 렌더링 된 응답에서 사용자를 누를 때 호출 될 StoreSaveAction.

아니면 액션 하나만 작성하나요?EditStoreAction을 실행하고 동일한 작업에 양식을 제출하면 사용자가 제출 시 변경 사항에 대해 수락 버튼을 눌렀다는 것을 알 수 있습니다.따라서 작업에서 다른 흐름을 실행하여 업데이트를 데이터베이스에 저장하고 diff 페이지로 리디렉션합니다.

여기서 가장 좋은 방법은 무엇입니까?코드를 모듈식으로 유지하므로 가능한 한 많은 작업을 만드시겠습니까?아니면 JSP에서 모든 것을 처리하기 위해 하나의 작업을 작성하시겠습니까?

이 질문이 다소 사소하게 들린다는 것을 알지만 때로는 모든 것을 올바르게 하고 싶을 수도 있습니다.따라서 질문입니다.당신의 도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

아이디어는 Spring MVC와 유사하게 액션을 특정 클래스(예: 컨트롤러)의 메서드에 매핑하는 것입니다.

따라서 귀하의 경우 이 두 작업은 동일한 클래스의 두 가지 다른 메서드에 매핑됩니다.수업에 전화할 수 있습니다. StoreFormController 그리고 두 가지 방법, editStore() 그리고 saveStore().

각 엔터티에 대해 두 개의 컨트롤러를 만드는 것이 더 좋습니다.하나는 모든 GET 요청용이고 다른 하나는 POST 요청용일 수 있습니다.따라서 귀하의 경우에는 두 개의 컨트롤러가 있습니다 StoreController 기타 모든 요청 및 StoreFormController 모든 양식 제출, 즉 게시물 요청에 대해.이제 첫 번째 작업인 GET은 다음으로 이동합니다. editStore() 의 방법 StoreController, 두 번째 POST 요청은 다음으로 이동합니다. saveStore() 의 방법 StoreFormController.요청 유형에 따라 이 두 클래스 중 하나에서 필요한 만큼 많은 메서드를 정의할 수 있습니다.

Spring MVC API를 알고 있다면 내가 어디에서 왔는지 쉽게 알 수 있습니다.

다른 팁

ACTION 클래스 ( "EXECUTE") 메소드에서 둘 이상의 메소드를 정의 할 수 있기 때문에 Struts Dispatchaction 클래스를 사용하고 싶습니다. 후드 뒤에는 실행 해야하는 메소드 (양식으로 제출하거나 URL에서 전달 된)를 찾아 반사를 사용하여 메소드를 찾아 올바른 인수 세트로 호출하는 것입니다 (메소드가 동일해야합니다. "실행"메소드의 서명)는 결과를 가져 와서 전달합니다. 파견은 단순히 행동 클래스의 "실행"메소드를 무시하여 해당 동작을 구현합니다.

즉, 귀하의 경우, 나는 하나의 클래스 만 정의 할 것입니다. "DispatchStoreacect"라고 말하면, 아마도 "준비"와 "저장"의 두 가지 방법을 정의 할 것입니다. 나는 여전히 좋은 수업 추상화를 가지고 있기 때문에 그렇게하는 것을 좋아합니다 (그리고 당신은 클래스 이름으로 실행하는 "행동"을 넣지 않습니다). 당신의 방법은 그들이해야 할 일을 명확하게 식별 할 수 있기 때문입니다. 정의상, 행동 클래스는 작은 경향이 있기 때문입니다. 어딘가에 정의 된 "StoreLogic"또는 "StoreBusiness"가있을 것입니다.이 클래스는 작업중 인 엔티티와 관련된 비즈니스 논리를 처리합니다. 개인적으로 "StoreAction"과 하나의 "StoreLogic", 하나의 "사용자 Action"및 "UserLogic"등이 있다면 관계가 1 ~ 1 일 필요는 없지만 유지하는 데 도움이된다고 생각합니다. 코드.

이를 수행하는 방법에 대한 아이디어는 파견 클래스의 소스 코드를 확인하지만 구현은 사소해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top