2011-11-09 2 views
3

나는이 방법을 필요 이상으로 혼란스럽게 만들었습니다. 다음은 단순화 된 버전입니다.스프링 mvc 폼이 다른 컨트롤러에 게시되거나이를 overthinking

1 - 오른쪽 위 모서리의 모든 페이지에 드롭 다운과 제출 버튼이 있습니다. 드롭 다운 목록은 언어 목록입니다. 사용자는 언어를 변경하고 제출 단추를 눌러 언어 컨트롤러로 이동하여 현재 언어를 업데이트 할 수 있습니다.

public class LanguageController { 

    @ModelAttribute("languageList") 
     public LanguageList populateLanguageList() { 
      return LanguageDAO.all(); 
     } 

     @RequestMapping("/setLanguage.mvc") 
     public ModelAndView setLanguage(
      @ModelAttribute("languageForm") LanguageForm languageForm, 
       HttpServletRequest request, 
       HttpServletResponse response 
       ){ 
      //do stuff 
     } 
    } 


<form:form modelAttribute="languageForm"> 
    <form:select path="acctGrpId" > 
     <form:options items="${languageList}"/> 
    </form:select> 
     <input type="submit"/> 
</form:form> 

모든 페이지에서 어떻게 사용할 수 있습니까? 페이지가 사용자를 편집/생성하는 페이지 일 수 있으므로 해당 페이지의 "컨트롤러"는 실제로 UserController 또는 RoleController 또는 DepartmentController이고 LanguageController는 아닙니다. 페이지가 무엇을하고 있는지에 관계없이이 특정 JSP가 특정 컨트롤러에 도달해야합니다.

답변

2

다른 작업 속성을 다른 형식으로 지정하기 만하면됩니다. 한 페이지에 여러 개의 양식이있는 데는 문제가 없습니다. 귀하의 경우에는

은 다음과 같습니다

<form action="Context/adduser.mvc"> 
</form> 

<form action="Context/addBookmark.mvc"> 
</form> 

+0

방금 ​​내 게시물을 업데이트했습니다. 잘하면 내 실제 문제는 동일한 JSP에서 여러 컨트롤러를 사용하고 있다는 의미입니다. 페이지 컨트롤러가 무엇으로 설정되어 있는지에 관계없이 jsp 페이지에 "이 컨트롤러 사용"을 어떻게 말할 수 있습니까? – samwise

+0

어쩌면 나는 아직도 그것을 얻지 못한다. 양식 태그에 다른 작업 속성을 지정하십시오. 이렇게하면 LanguageController가 제공해야하는 양식이 제공되며 실제 페이지의 양식은 페이지의 컨트롤러에서 제공됩니다. – soulcheck

0

귀하를 도와 드리고 싶지만 귀하의 요구 사항을 확신 할 수 없습니다.

BookMarkController에 대해 다양한 방법을 사용하고 추가/업로드 메서드를 호출하는 것에 대해 이야기하고 있습니까?

또는 BookMarkController에 둘 이상의 양식을 포함 하시겠습니까?

더 자세히 설명해 주시겠습니까?

저는 모든 JSP 페이지가 링크를 클릭 할 때 양식을 저장할 수있는 컨트롤러에 데이터를 게시하기를 원합니다. 이것은 매우 간단합니다. 모든 컨트롤러에 savePage 메소드를 추가하고 그에 따라 uri를 매핑 할 수 있으며 savePage 메소드에서 요청을 페이지를 저장하기 위해 작성한 특정 컨트롤러로 재지향 할 수 있습니다.

희망이 도움이됩니다.

+0

이건 어때 : 전체 업로드 사용자의 일을 무시 - 당신은 (JSP를 JSP로를 포함 할 수있는 페이지를 사용중인 경우 : include path = "bookmark.jsp") bookmark.jsp 페이지에는 스프링 폼이 있고이 폼은 북마크 컨트롤러와 연결되어 있습니다 ... 어떻게 생겼습니까? 그 JSP는 어떻게 보이겠습니까? JSP가 "현재"페이지에 정의 된 컨트롤러 대신 책갈피 컨트롤러를 누르는 방법은 무엇입니까? – samwise

0

귀하의 JSP는 컨트롤러에서 분리 된보기입니다. MVC의 아름다움, 모델, 뷰 및 컨트롤러의 분리입니다. 뷰를 컨트롤러 또는 "현재"컨트롤러가있는 페이지에 묶여 있다고 생각할 필요는 없습니다. 예, 컨트롤러가 모델 속성 채우기를 처리하여보기를 렌더링하고보기의 작업 결과로 양식 게시를 처리하기 때문에 종종 그 연관성을 매우 강하게 만듭니다. 그러나 실제로 모든 컨트롤러는보기를 반환하는 한 모든보기를 반환 할 수 있습니다. 모델을 올바르게 작성하고 모든 뷰를 모든 컨트롤러에 제출할 수 있습니다. 보기는 따라 오는 URL에 따라 다른 시간에 다른 컨트롤러에 제출할 수도 있습니다.

그래서 귀하의 경우, soulcheck에 따르면 양식을 제출할 URL을 변경하기 만하면됩니다. 컨트롤러가 @RequestMapping으로 매핑되기 때문에 폼의 액션을 변경하면 스프링 MVC가 적절한 RequestMapping을 찾을 수있는 한 폼이 제출 될 때 호출되는 컨트롤러 클래스 및/또는 메소드가 변경됩니다.

+0

아! 끊긴 모델의 인구입니다. 꼭 RequestMapping이 아닙니다. 예를 들어 $ {languageList}는 UserController에서 사용할 수 없습니다. 그렇다면 어떻게하면 LanguageController에서 $ {languageList} 값을 얻을 수 있습니까? 언젠가는 "언어 컨트롤러를 가져와"라고 말하면서 언어 목록을 가져 와서 양식을 만들 수 있습니다. 거기서부터 LanguageController에 게시 할 수 있지만, 데이터를 얻는 것은 내가 갇혀있는 곳입니다. – samwise

+0

내가 할 때, 컨트롤러를 단순히 뷰에 필요한 데이터의 집합체로 사용하려고합니다. 그들은 데이터를 얻기 위해 어떤 일도하지 않습니다. 따라서, languageList (데이터베이스, 속성, 어디에서든지)를 가져올 메소드가있는 서비스 또는 유틸리티 클래스가 있으면 두 컨트롤러가 모두 해당 메소드를 호출하여 모델을 올바르게 채울 수 있습니다. 저는 컨트롤러를 가능한 한 자율적으로 유지하려고합니다. 하나의 컨트롤러가 다른 컨트롤러에 의존하기를 원하지는 않지만 개인적인 취향입니다. – digitaljoel

+0

또는 languageList를 세션 속성에 넣으면됩니다. – GriffeyDog