2014-04-26 7 views
5

I sviluppare applicazioni su framework gioco 2.2 Ho un percorsi di file come questo:percorsi Giocare quadro, ed i valori Scala PREDEF

GET /posting/   controllers.posting.BlogController.allPosts() 
GET /posting/:number controllers.posting.BlogController.allPosts(number: Int) 

E 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)) 
    } 
} 

quando cerco di comile che , Dò un errore:

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) 

E non riesco a capire come risolverlo. Qualcuno può aiutarmi?

risposta

8

È possibile necessario utilizzare il parametro con il valore di default:

GET /posting/   controllers.posting.BlogController.allPosts(number: Int = 1) 
GET /posting/:number controllers.posting.BlogController.allPosts(number: Int) 

E 'vietato utilizzare metodi di overload allPosts(Int) e allPosts. Poiché hai dichiarato allPosts con due parametri con valori predefiniti, Scala vede questo metodo come 4 metodi diversi. Puoi usare solo uno di questi.

+0

non funziona. Ho un nuovo errore: "Non è permesso specificare un valore fisso o predefinito per parametro: 'numero' estratto dal percorso" – StopKran

+0

Siamo spiacenti. Ho aggiornato la risposta. – LRLucena

+0

Questo è lavoro. Grazie! – StopKran

0

È anche possibile utilizzare i parametri opzionali. Qualcosa di simile

GET /posting/   controllers.posting.BlogController.allPosts(number: Option[Int]) 
GET /posting/:number controllers.posting.BlogController.allPosts(number: Int) 

Quindi è possibile chiamare questo con o senza un parametro nella query:

/posting?number=1 
/posting 

Assicurarsi si dichiara un opzione pure nel controller

1

La risposta fornita da LRLucena sta lavorando per me.

GET /posting/ controllers.posting.BlogController.allPosts(number: Int = 1) GET /posting/:number controllers.posting.BlogController.allPosts(number: Int)

La mia versione 2.5.6 gioco è quello più recente. :-)

1

È necessario disporre di tutti i parametri definiti per la stessa funzione. Nel tuo caso allPosts. Assegna un valore predefinito per le rotte in cui non hai bisogno di quel parametro.

GET /posting/   controllers.posting.BlogController.allPosts(number: Int ?= 0) 

GET /posting/:number controllers.posting.BlogController.allPosts(number: Int)