2011-05-18 77 views
4

我在我的applcation routes文件有這個Playframework路線問題

#{form @save()} 
... 
#{/form} 

但一旦是提交它的發送形式我到/tweets/save而不是/new。任何想法如何解決這個問題?謝謝!

+1

顯示您的整個路線文件,而不僅僅是相關的代碼段。正如Codemwnci所述,您定義路線的順序非常重要。 – 2011-05-19 07:26:36

回答

5

如果你已經嘗試下面的路線(這是使用路線的正確方法)

#{form @Tweets.save()} 

,這沒有工作,我想你可能已經把你的路線錯了地方。確保它位於路線文件的頂部,而不是在全部路線之後。路徑文件按順序處理,所以如果找到了catch-all,則首先使用該路由文件,並忽略其他路由。全部看起來像

* /{controller}/{action}  {controller}.{action} 
+0

這是導致這個問題,我不知道順序重要,我把我的代碼放在我的路線文件的底部。謝謝! – networkprofile 2011-05-19 10:02:10

1

使用

#{form @Tweets.save()} 

我認爲這是建議與方法名稱中使用類名嘗試。

編輯:

播放架構路由的工作方式是你定義爲

GET  /clients   Clients.index 

一些路線如果與URI /clients遇到了一個請求,那麼它將被截獲Clients.index()。如果您有其他路由,以便將

GET  /clients   Clients.save 

然後框架會忽略此路由,因爲/clients AREADY有一個映射。 (很可能它在控制檯或日誌記錄流中給出了一些錯誤,請檢查你的日誌。)

因此你不能使它像那樣工作。我看到,你請求了一個反向映射,它將爲不同的方法返回相同的URI。然而,該框架旨在攔截請求,以便它會忽略你的第二個路由。

嘗試分開頁面。很可能你想要的是爲兩個函數渲染相同的視圖。你可以做到這一點,而不必將它們重定向到相同的URI。

+0

這沒有什麼區別.. – networkprofile 2011-05-18 23:02:43

+0

你可以在瀏覽器上使用'show source'選項並告訴我們'

'元素的'action'屬性是什麼? – 2011-05-18 23:52:22

+0

生成的表單標籤是'' – networkprofile 2011-05-19 00:44:46

0

我認爲(如果我沒有誤讀),問題是你期待錯誤的行爲。

據我所知,你期望提交將發送到Tweet.save()(POST方法),然後返回到Tweet.create()(GET方法),因爲它們都共享相同的路徑(/ new)。

實際上,Play正在調用Tweet.save(),它期望Tweet.save()結束時的渲染顯示一些結果。如果你想重定向到Tweet.create(),你可以在Tweet實現結束時對該方法進行調用。保存(),與任一:

create(<params>); 

render("@create", <params>); 

以及應當(經由302)重定向到GET版本。

+1

我期待着這裏描述的行爲:http://www.playframework.org/documentation/1.2.1/guide9問題是我的路線順序。 – networkprofile 2011-05-19 10:04:14