在我查找控制器的控制方法,我有一個方法,如:綁定一個HTML表單的行動,需要一些參數
public Result findLatest(String repoStr) {
............
}
這是通過路由鏈接:
GET /latest controllers.Find.findLatest(repo: String)
然後,我在一個視圖中有一個窗體如下:
<form action="@routes.Find.findLatest()" method="get">
....
<select name="repo">....</select>
</form>
但顯然這是失敗的,因爲它期望我做的一些參數在行動中不履行。什麼是正確的方法來做到這一點,而不必離開findLatest方法在我的控制器中沒有參數?
謝謝,唯一的小問題是他們刪除了Play 2.1中Option的Path binder。我們刪除了路徑綁定中的Option [Long]支持,因爲它沒有任何意義可選的路徑參數。如果您願意,您可以實現自己的路徑綁定。 「但傳遞一個可選的而不是一些任意的值在我看來好多了。這不就是我們首先有選擇權的原因嗎?也許我寧願在這種情況下創建2種不同的方法,因爲它比傳遞-1作爲id更有意義。 – lqbweb
@Ruben啊你是對的。這不會工作2.1+。另一種選擇是將你的命名參數變成查詢參數,例如而不是/ latest/repo/artifact你的url看起來與/ latest相似嗎?repo = somerepo&artifact = someartifact哪個是支持2.1+的。對困惑感到抱歉。 – Chrizt0f
@ RobertUdah的答案對你更好,如果你仍然需要空的命名參數。如果你堅持要有repoStr!= null檢查(vs repoStr!= null &&!isEmpty()),你可以在路由中將String初始化爲空。例如 GET/latest /:repo controllers.Find.findLatest(repo:String = null) GET/latest /:repo controllers.Find.findLatest(repo:String)。 這將節省您不必在你的視圖中爲空,並允許羅伯特清潔