2011-11-09 72 views
3

我讓這種方式比它需要更混亂。這是簡化的版本。彈簧mvc表單發佈到不同的控制器,或過度這個

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映射,所以只要Spring MVC可以找到合適的RequestMapping,更改表單的動作就會更改在提交表單時調用的控制器類和/或方法。

+0

啊!這是模型的人口,我掛了,不一定是RequestMapping。例如$ {languageList},這不會在UserController上可用。那麼如何從LanguageController獲得$ {languageList}值...在某些時候,我必須說「讓我使用語言控制器」,以便我可以獲取語言列表並構建表單。從那裏我可以發佈到LanguageController蠻好的,但獲取數據是我卡住的地方 – samwise

+0

當我這樣做時,我嘗試使用控制器作爲視圖所需數據的聚合器。他們沒有做任何工作來獲取數據。所以在你的情況下,你需要一個服務或實用程序類,它有一個方法來獲取languageList(從數據庫,屬性,無論它在哪裏),然後這兩個控制器可以調用該方法來正確地填充模型。我儘量保持控制器儘可能自主,不想讓一個控制器依賴另一個控制器,但這是個人偏好。 – digitaljoel

+0

或者只是將languageList放入會話屬性中。 – GriffeyDog