2012-09-16 54 views
2

我正在研究一個具有相互依賴形式的struts2項目。 我發現Struts2的-談話,通過他們simple-example 加強和理解的對話機制,這一步(請糾正我,如果我得到了一些錯誤):struts2對話和驗證

  • 該控制器在struts.xml中
  • 它擁有映射可序列化ConversationContext和存儲即服務
  • 的ConversationContext被命名約定

持有映射形式的POJO現在的問題是放在哪裏的有效通貨膨脹?

在此結構中,控制器只是一個擴展ConversationSupport,因此ActionSupport提供了驗證,準備和添加字段的ActionError方法。 但是,在控制器內部驗證意味着驗證整個上下文,這並不能真正解決問題。

我嘗試通過POJO內的註釋進行驗證,如上所述,這給了我一些NullPointerException,就好像上下文沒有被刷新一樣,我認爲struts2的xml驗證方法太僵硬了。 (順便說一句,如何讓生成的javascripts在被提供之前被縮小?爲什麼會有這麼多選項?)

馬克的對話攔截器方法有similar problems即將到來,這是我沒有得到的解決方法。也許你可以幫助我。

回答

1

如果您想在您的模型類上使用註釋,它可以很好地使用插件(與其他驗證方法一樣)。

要驗證您的模型,請在控制器中將@VisitorFieldValidator添加到getModel()方法中。在示例應用程序中,您還可以將@VisitorFieldValidator添加到getContact()getPreferences()方法中。然後,您可以在要驗證的字段上使用validation annotations

這個例子中的服務就是一個在Struts2控制器中使用注入服務的簡單例子,以及它如何可以輕鬆地與對話框架集成,但它並不直接相關或不需要(我推薦使用無論是Spring,Guice還是CDI,都可以在現實世界中進行依賴注入)。

ConversationContext類主要用於框架的內部使用。您應該能夠通過使用註釋和約定來避免與其交互。除非你只是想冒險。

要在示例應用程序中使用XML驗證,您必須更改包名以刪除「struts2」字,以便Struts2資源加載工具加載XML。

+0

+1不錯的解釋,我期待着你回答:) –

+0

老問題,但我無法在任何罐子裏找到FieldVisitorValidator ?! –

+0

@AlirezaFattahi我的歉意,這似乎是一個錯字。我應該使用複製/粘貼!它應該說'@ VisitorFieldValidator'。謝謝! – rees