2009-04-17 60 views
1

我使用Spring的SimpleFormController進行表單處理。在我的情況下,編輯視圖(JSP)可以根據正在編輯的內容而有所不同。 SimpleFormControllerformView是一個字段(類變量),這意味着它由所有使用它的實例的線程共享。因此,在formBackingObject中設置formView(通過setFormView)並不安全(也不合適)。我的問題是,是否有可能根據某些上下文使用具有不同編輯視圖的SimpleFormController與Spring的SimpleFormController不同意見

跟進:查看源之後,似乎我可以覆蓋showForm(HttpServletRequest req, HttpServletResponse resp, BindException errors)並呼籲showForm(HttpServletRequest req, BindException errors, String viewName)與我想要的任何看法。

+0

該死的,我打字,你更快地回答你自己的問題:)祝你好運。一旦你追溯到頂端就很容易使用 - 但我希望它更好。儘管我沒有註解的方法,但它只是讓我感到困惑,我寧願使用控制器界面編寫我自己的控制器。 – MetroidFan2002 2009-04-17 21:12:23

+0

我應該指出,到目前爲止,我已經有更多的時間來學習和使用Spring中的註釋控制器,並且它們非常棒。雖然轉換服務需要更多的工作來處理泛型類型處理(例如包含特定有界類型的List實例)。 – MetroidFan2002 2012-08-16 04:26:29

回答

3

我相信SimpleFormController提供了兩個「showForm」保護方法。這些可以被重寫,並且BindException用於檢索作爲表單對象的「目標」,然後可以基於任何綁定的表單對象屬性返回ModelAndView。你也應該看看processFormSubmission,它指出哪些方法真的被調用。另一種方法是「isFormChangeRequest」,它決定了你的表單是否應該改變 - 你可以用它來將它設置爲true,然後它將調用showForm與請求,響應等,然後你可以重新檢查請求。

您將學習如何使用此層次結構的唯一方法是檢查它。它不是很好 - 它提供了很多東西,但不是很好。通常必須擴展Spring MVC以使其非常有用。

+0

我想了解更多關於你認爲在Spring MVC中打包的控制器沒有做到的「非常好」。就我個人而言,我覺得它們非常有用,作爲一個起點 – 2009-04-18 03:41:31

+0

它們作爲一個出發點很棒,但它們提供了太多的保護方法,您必須追溯到調用它的位置。另外,如果你想以不同的方式使用他們的控制器,很難找到副作用。例如,我有一個表單控件,我不得不存儲表單對象,以便它可以重定向到另一個控制器,該控件使用會話中的對象顯示數據 - 但對我來說最不可知的是,表單控制器刪除了對象 – MetroidFan2002 2009-04-18 04:41:02

+0

.. 。現在,它確實在Javadoc上針對某些方法說了這些,但有很多受保護的方法很難找到實際需要使用的方法。層次結構太複雜 - 名稱中包含「Simple」的類擴展了六個類(忽略Object擴展),並且可能有大約50個方法是可笑的,並且是糟糕設計的關鍵指標。太多的延伸,沒有足夠的使用。 – MetroidFan2002 2009-04-18 04:43:59

0

我不認爲這是可以與SimpleFormController。

您可以嘗試停止使用即將被棄用的控制器層次結構類,並查看使用Spring 2.5引入的基於註釋的控制器。他們允許更靈活的表單處理。如果您不喜歡自動注射,請不要拖延。雖然沒有一個例子真的很明顯,但您可以使用註釋驅動的控制器並在XML內容中定義所有bean。