2011-11-14 29 views
0

對於這個有點無知的問題,我很抱歉,但是我已經在過去的一週裏儘可能地自己研究了這個問題。我的最後一招是來這裏,因爲我知道堆棧溢出的人是最聰明的人。我在哪裏可以放置需要在Play Framework的所有網頁上運行的代碼?

我是一個ASP.NET傢伙,最近他們轉而使用Play,每個公司的授權。我有點迷路。 MVC對我來說是新的,ORM完全讓我害怕。

我已經瀏覽了playframework.org上的教程,雖然我能夠構建博客引擎,但我只是將他們的教程中的代碼抄錄到我自己的程序中,所以我不覺得我真的學會了任何東西。

現在我不得不寫一個.NET網站的PLay版本。所以在我的問題上。

在我的遊戲應用程序的每個網頁上,我需要運行一些Java代碼來生成一個巨大的HTML字符串,然後將該HTML字符串吐在視圖上某個標籤上。這就像一個100行函數,它最終返回一個字符串,我把它呈現給客戶端。在我的.NET網站中,我只是把它放在我的母版頁的「代碼背後」。

問題是我在Play中的母版頁沒有代碼隱藏。那麼我在哪裏把所有需要在每個頁面上執行的這些java代碼?我開始研究控制器,但它不是一個我將轉發到渲染函數的對象,它是一個100行函數,它執行一堆邏輯並返回一個巨大的字符串。我在每個屏幕上都需要這些代碼,所以把它放在控制器級別是沒有意義的,因爲那樣我就必須每次都把它傳遞給「渲染」,而且我有100個動作。

如果你的代碼不是一個模型,並且在控制器中沒有意義,那麼你真的會提出更大的問題嗎?無論如何,先謝謝你。

乾杯 喬希

回答

0

我需要每個屏幕上的代碼,因此它沒有意義把它在控制器級別,因爲那時我不得不把它傳遞給「渲染」每時間,我有100個動作。

對於這些情況,您可以使用@Before註釋。在你的控制器:

@Before 
public static void bigFunction() { 
    String result; 
    // Do a lot of stuff... 
    renderArgs.put("yourLabel", result); 
} 

在模板中,你可以通過現在訪問:

${yourLabel} 
+0

他還需要使用raw:$ {yourLabel.raw()},因爲該函數返回預呈現的HTML。 –

+0

另外 - 應該對bigFunction進行保護,以防止它作爲操作暴露。 –

+0

我不會反對,但你確定它是必要的嗎?當訪問/ bigFunction時,我得到一個404。 –

0

我覺得馬呂斯有你正在尋找短期的答案。但是,恕我直言,如果你花時間來完成功能並將其正確地重新實現到MVC組件中,那麼你可以通過繼任者(或者你自己一年之後)做得很好。也就是說,將數據表示和操作的東西放入模型中,並將HTML生成的東西放入視圖標記或main.html模板中。

+0

我已經考慮過這個斯科特,但是這個代碼只是一個輔助工具功能,它本身沒有任何狀態。我只需要它來運行每個請求。這將是一個有趣的模型,只有一個屬性和一個用於填充該屬性的函數。這通常在MVC中完成嗎? –

+0

大多數情況下,您會製作一個包含最少量邏輯的模板。優點是,這看起來更像直接類似於你正在生成的HTML(沒有out.println的)。然後把決策的東西放在你的控制器(或模型)中,並設置模板需要的任何renderArgs值。但是,Play可以讓你創建自定義標籤(http://www.playframework.org/documentation/1.2.3/templates#tags-向下滾動到自定義Java標籤) –

相關問題