播放框架路由和scala predef值
我在play framework 2.2上开发应用程序 我有一个如下的路由文件:播放框架路由和scala predef值,scala,playframework,playframework-2.2,Scala,Playframework,Playframework 2.2,我在play framework 2.2上开发应用程序 我有一个如下的路由文件: GET /posting/ controllers.posting.BlogController.allPosts() GET /posting/:number controllers.posting.BlogController.allPosts(number: Int) 和BlogContriller: object BlogController extends Controller
GET /posting/ controllers.posting.BlogController.allPosts()
GET /posting/:number controllers.posting.BlogController.allPosts(number: Int)
和BlogContriller:
object BlogController extends Controller {
def allPosts(pageNumber:Int = 1, postsPerPage:Int = 10) = Action{
val posts = Post.getLastNPosts(postsPerPage, postsPerPage*(pageNumber-1))
val htmlPosts = new Html(new StringBuilder());
for (post <- posts){
val htmlPost = views.html.posting.post(post.getName, post.getText, post.getDate.toString)
htmlPosts += htmlPost;
}
Ok(views.html.posting.index(htmlPosts))
}
}
我不明白如何解决这个问题。有人能帮我吗?您可以使用带有默认值的参数:
GET /posting/ controllers.posting.BlogController.allPosts(number: Int = 1)
GET /posting/:number controllers.posting.BlogController.allPosts(number: Int)
您不能使用重载方法
allPosts(Int)
和allPosts
。由于您使用两个带有默认值的参数声明了allPosts
,Scala将此方法视为4种不同的方法。您只能使用其中一个。您也可以使用可选参数。差不多
GET /posting/ controllers.posting.BlogController.allPosts(number: Option[Int])
GET /posting/:number controllers.posting.BlogController.allPosts(number: Int)
然后,您可以在查询中使用或不使用参数调用它:
/posting?number=1
/posting
确保在控制器中也声明了一个选项必须为同一函数定义所有参数。在您的情况下,
allPosts
。为不需要该参数的管线提供默认值
GET /posting/ controllers.posting.BlogController.allPosts(number: Int ?= 0)
GET/posting/:number controllers.posting.BlogController.allPosts(number:Int)
不起作用。我有一个新错误:“不允许为参数指定固定值或默认值:'number'从路径中提取”
GET /posting/ controllers.posting.BlogController.allPosts(number: Int ?= 0)