我在play framework 2.2上开发应用程序 我有这样的路线文件:
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))
}
}
当我试图加入时,我给出了一个错误:
Error:(14, -1) Play 2 Compiler: C:\...\conf\routes:14: Compilation error[Using different overloaded methods is not allowed. If you are using a single method in combination with default parameters, make sure you declare them all explicitly.]
GET /posting/:number controllers.posting.BlogController.allPosts(number: Int)
我无法理解如何解决这个问题。任何人都可以帮助我吗?
答案 0 :(得分:9)
您必须使用带默认值的参数:
GET /posting/ controllers.posting.BlogController.allPosts(number: Int = 1)
GET /posting/:number controllers.posting.BlogController.allPosts(number: Int)
您不能使用重载方法allPosts(Int)
和allPosts
。由于您使用默认值声明了allPosts
两个参数,因此Scala将此方法视为4种不同的方法。你可能只使用其中一个。
答案 1 :(得分:1)
您必须为同一功能定义所有参数。在您的情况下allPosts
。为您不需要该参数的路线提供默认值。
GET /posting/ controllers.posting.BlogController.allPosts(number: Int ?= 0)
GET /posting/:number controllers.posting.BlogController.allPosts(number: Int)
答案 2 :(得分:0)
您还可以使用可选参数。像
这样的东西GET /posting/ controllers.posting.BlogController.allPosts(number: Option[Int])
GET /posting/:number controllers.posting.BlogController.allPosts(number: Int)
然后你可以在查询中使用或不使用参数调用它:
/posting?number=1
/posting
确保您在控制器中声明了一个选项