Così in Play 2.0 ho avuto questa:Percorsi con parametro opzionale - Gioca 2.1 Scala
GET /tasks/add controllers.Tasks.addTask(parentId: Option[Long] = None)
GET /tasks/:parentId/add controllers.Tasks.addTask(parentId: Option[Long])
Con un metodo di controllo come questo:
def addTask(parentId: Option[Long]) = Action {
Ok(views.html.addTask(taskForm, parentId))
}
E lavoravo. Come ho migrato a 2.1, sembra lamentarsi di queste righe con: No URL path binder found for type Option[Long]. Try to implement an implicit PathBindable for this type.
Fondamentalmente, quello che sto cercando di fare è avere il percorso tasks/add
e il percorso tasks/123/add
link allo stesso metodo che accetta uno Optional[Long]
. Qualche idea su come fare questo? Grazie.
Ok, quindi ho una specie di bug non è un bug, è una funzione di risposta su Lighthouse: "Abbiamo rimosso il supporto Option [Long] nei path bindables poiché non ha senso avere un parametro path opzionale. puoi implementare il tuo percorso personale che lo supporta, se lo desideri. " Finora ho 2 soluzioni, passando -1 come parentId, che non mi piace molto. O con 2 metodi diversi, che probabilmente hanno più senso in questo caso. L'implementazione di PathBindable non sembra troppo fattibile in questo momento, quindi probabilmente continuerò ad avere 2 metodi.
Grazie, l'ho segnalato. Hai idea di come ottenere il comportamento desiderato senza dover aspettare una correzione? – Laky
Ok, quindi: "Abbiamo rimosso il supporto Option [Long] nei path bindable poiché non ha senso avere un parametro path opzionale.Puoi implementare il tuo percorso bindable che lo supporta, se vuoi." Ma passare un Opzionale invece di qualche valore arbitrario mi sembra molto più bello. Non è questo il motivo per cui abbiamo optionals in primo luogo? Forse in questo caso preferirò creare 2 metodi diversi, in quanto avrebbe più senso del passare -1 come id. – Laky
Sì, hai ragione, è molto meglio. Non capisco la loro decisione, però, perché rimuovere qualcosa che consentisse URL più gradevoli? –