2010-08-09 46 views
1

我把println()放在Action類的每個方法中。ModelDriven和Prepare的序列?

我以爲訂單是; 準備→執行→getModel。

因爲我記得我在書中讀過它,所以我曾經在prepare()中構建了豆類並做了一些邏輯,然後在​​中返回SUCCESS。 我認爲getModel是將bean推送到valueStack,對嗎?

......無論如何,控制檯向我展示了這一點。這很奇怪, prepare→getModel→執行。

這對我來說是一個巨大的問題。很難用英語解釋原因......但我會盡力的!

我用來創建每個操作類,這是處理相同的豆,當然有相同的代碼(變量,和他們的getter和setter)重複在每個操作類。

現在我試圖創建一個操作來避免重複。這個動作類有幾個方法(如這樣映射到struts.xml中; <action name="View_board" method="view">)。

正如我們在控制檯中看到的那樣,view()在動作類的最後被調用,如​​。 prepare()只建立豆類,而view()確實做了真正的工作。但在調用view()之前調用getModel(),因此沒有機會將Bean放入ValueStack。

我希望你們明白我想說明什麼。

總結起來,有每個動作類,如BoardView,BoardDelete,BoardWrite ...,他們運作良好!但我討厭重複的東西,所以我創建了BoardManager類。這個類有每個方法(如view()),它是由類(如BoardView)處理的。但是這個視圖()在調用getModel()之後調用,所以bean(返回getModel())沒有機會被推送到ValueStack。

請幫我一把。教我在實地的技術訣竅。我正在自己開發這一切,這讓我感到很難受。

謝謝!

+0

從另一個奇怪的事情。在控制檯中有3個getModel ..意味着該框架試圖獲得模型3次,這是失蹤..我猜 – Deckard 2010-08-10 11:30:06

回答

5

您必須自己設置Model對象,因爲modeldriven攔截器只能將其推送到堆棧,如果它不爲null。如果您getModel()看起來是這樣的:

SomeModelClass myModelObject = null; 

public Object getModel() 
{ 
    return myModelObject; 
} 

...你必須設置modelObject所以它可以推送到值棧。你可以做這種方式我想:

public void prepare(){ 
    myModelObject = new myModelObject("I'm so new"); 
} 

...或只是初始化領域:

SomeModelClass myModelObject = new myModelObject("I'm so new"); 

不要忘記實施適當的接口(模型驅動和製備的)。希望這個對你有幫助。

0

我發現我自己的解決方案..但不是一個好..

當設置器域對象,我把它推到手動值棧..

它的工作好,只增加了2行我的班級。

但我感覺不太好。

相關問題