我在我的applcation routes文件有這個Playframework路線問題
#{form @save()}
...
#{/form}
但一旦是提交它的發送形式我到/tweets/save
而不是/new
。任何想法如何解決這個問題?謝謝!
我在我的applcation routes文件有這個Playframework路線問題
#{form @save()}
...
#{/form}
但一旦是提交它的發送形式我到/tweets/save
而不是/new
。任何想法如何解決這個問題?謝謝!
如果你已經嘗試下面的路線(這是使用路線的正確方法)
#{form @Tweets.save()}
,這沒有工作,我想你可能已經把你的路線錯了地方。確保它位於路線文件的頂部,而不是在全部路線之後。路徑文件按順序處理,所以如果找到了catch-all,則首先使用該路由文件,並忽略其他路由。全部看起來像
* /{controller}/{action} {controller}.{action}
這是導致這個問題,我不知道順序重要,我把我的代碼放在我的路線文件的底部。謝謝! – networkprofile 2011-05-19 10:02:10
使用
#{form @Tweets.save()}
我認爲這是建議與方法名稱中使用類名嘗試。
編輯:
播放架構路由的工作方式是你定義爲
GET /clients Clients.index
一些路線如果與URI /clients
遇到了一個請求,那麼它將被截獲Clients.index()
。如果您有其他路由,以便將
GET /clients Clients.save
然後框架會忽略此路由,因爲/clients
AREADY有一個映射。 (很可能它在控制檯或日誌記錄流中給出了一些錯誤,請檢查你的日誌。)
因此你不能使它像那樣工作。我看到,你請求了一個反向映射,它將爲不同的方法返回相同的URI。然而,該框架旨在攔截請求,以便它會忽略你的第二個路由。
嘗試分開頁面。很可能你想要的是爲兩個函數渲染相同的視圖。你可以做到這一點,而不必將它們重定向到相同的URI。
我認爲(如果我沒有誤讀),問題是你期待錯誤的行爲。
據我所知,你期望提交將發送到Tweet.save()(POST方法),然後返回到Tweet.create()(GET方法),因爲它們都共享相同的路徑(/ new)。
實際上,Play正在調用Tweet.save(),它期望Tweet.save()結束時的渲染顯示一些結果。如果你想重定向到Tweet.create(),你可以在Tweet實現結束時對該方法進行調用。保存(),與任一:
create(<params>);
或
render("@create", <params>);
以及應當(經由302)重定向到GET版本。
我期待着這裏描述的行爲:http://www.playframework.org/documentation/1.2.1/guide9問題是我的路線順序。 – networkprofile 2011-05-19 10:04:14
顯示您的整個路線文件,而不僅僅是相關的代碼段。正如Codemwnci所述,您定義路線的順序非常重要。 – 2011-05-19 07:26:36