2009-06-18 80 views
0

我使用的MVC框架有點像struts。 所以,說我在我的應用程序中的「編輯存儲」的鏈接,這是網址會是什麼樣子:Java:MVC中的表單提交:什麼是最佳實踐?

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

現在,動作決定了我的動作(類似Struts的Action)中運行。這裏的相應操作是:EditStoreAction。點擊此按鈕將彈出一個商店的不同屬性進行編輯。

我在這裏的問題是: 我怎樣寫我的行爲?我在這種情況下寫兩個動作嗎?

  1. EditStoreAction這會使 edit.jsp文件
  2. StoreSaveAction其中,當用戶按下 接受 edit.jsp文件的呈現的響應 將調用。

或做我只是寫一個行動? EditStoreAction並將表單提交到同一個動作,我會知道用戶已經按下了接受按鈕以提交更改。所以,我會在Action中執行一個不同的流程,這會保存數據庫的更新並重定向到diff頁面。

這裏最好的實踐是什麼?儘可能創建儘可能多的動作,因爲它使代碼保持模塊化?或者只寫一個動作來處理jsp中的everthing?

我知道這個問題聽起來有點瑣碎,但是,有時你只是想讓一切都正確。因此,這個問題。感謝你的幫助。

回答

2

的想法是,類似Spring MVC的,對你的行爲映射到特定類的方法,說出來的控制器。

因此,在你的情況下,這兩個動作將映射到同一類的兩個不同的方法。您可以撥打類StoreFormController以及兩種方法,editStore()saveStore()

更好的是,如果您爲每個實體制作兩個控制器。可能是所有GET請求之一,另一個是POST請求。所以,就你的情況而言,對於所有其他請求將有兩個控制器StoreController,並且對於所有表單提交,即發佈請求將有兩個控制器StoreControllerStoreFormController。現在,您的第一個操作是GET,將進行editStore()方法StoreController,而第二個POST請求將轉到saveStore()方法StoreFormController。根據請求類型,您可以根據需要在這兩個類中定義多個方法。

如果您瞭解Spring MVC API,您可以很容易地看到我來自哪裏。

1

我喜歡使用Struts的DispatchAction類,因爲我可以定義在動作類一種以上的方法(「執行」)的方法。在引擎蓋後面,它所做的一切就是找到它必須執行的方法(在表單中提交或在URL中傳遞),使用反射查找方法,使用正確的參數集調用它(方法必須具有相同的方法「execute」方法的簽名),獲得結果並傳遞給它。 DispatchAction簡單地覆蓋了Action類的「execute」方法來實現該行爲。

話雖這麼說,你的情況,我會只定義一個類 - 讓我們說「DispatchStoreAction」,我會定義兩個方法,可能是「準備」和「保存」。我喜歡這樣做,因爲我仍然有一個很好的類抽象(並且不要將你正在執行的「動作」放在類名中),因爲你的方法可以清楚地識別他們應該做什麼,因爲根據定義,行動類別往往很小。您可能會在某處定義「StoreLogic」或「StoreBusiness」,並且該類將處理與正在處理的實體相關的業務邏輯。我個人認爲,如果你有一個「StoreAction」,然後是一個「StoreLogic」,一個「UserAction」和一個「UserLogic」等等 - 這種關係不需要是1比1,但我認爲它有助於維護代碼。

檢查就如何做到這一點的想法的DispatchAction類的源代碼,但是實現應該是微不足道的。