2012-06-14 9 views
5

He definido un tipo de enumeración Format que implementa QueryStringBindable. Creo que lo he implementado correctamente, pero en mi archivo de rutas, no puedo especificar mi tipo como un parámetro de ruta, porque el compilador no puede encontrarlo, y no tengo idea de cómo importarlo en el archivo de rutas.QueryStringBindable para una enumeración personalizada

Aquí está la enumeración:

package web; 

import java.util.Map; 

import play.libs.F; 
import play.mvc.QueryStringBindable; 

public enum Format implements QueryStringBindable<Format> { 
    Html, 
    Pdf, 
    Csv; 

    private Format value; 

    @Override 
    public F.Option<Format> bind(String key, Map<String, String[]> data) { 
     String[] vs = data.get(key); 
     if (vs != null && vs.length > 0) { 
      String v = vs[0]; 
      value = Enum.valueOf(Format.class, v); 
      return F.Option.Some(value); 
     } 
     return F.Option.None(); 
    } 

    @Override 
    public String unbind(String key) { 
     return key + "=" + value; 
    } 

    @Override 
    public String javascriptUnbind() { 
     return value.toString(); 
    } 
} 

Y aquí es mi ruta:

GET  /deposits         controllers.Deposits.index(selectedAccountKey: Long ?= 0, format: Format ?= Format.Html) 

¿Cómo puedo saber el compilador de mi enumeración? ¡Gracias!

Editar

También he intentado añadir la ruta al tipo de Build.scala como se ha recomendado en otros mensajes:

val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings(
    routesImport += "web.Format", 
    resolvers += Resolver.url("My GitHub Play Repository", url("http://www.joergviola.de/releases/"))(Resolver.ivyStylePatterns) 
) 

me cambió eso y reinicia el servidor, pero parece que no hace diferencia alguna.

Respuesta

0

Uso nombre cualificado en el archivo de rutas, es decir web.Format

+1

Lo he probado antes de la publicación. No dados. – Samo

4

que tenía el mismo problema y finalmente descubrí que no es solucionable como es.

Mediante la lectura de la documentación de PathBindable y QueryStringBindable me encontré con que el juego marco requiere la enlazables para proporcionar un constructor público sin argumentos. Que por definición no es posible con enum en Java.

Me gustaría ofrecerle la misma solución que hice otra (más reciente) pregunta. Acabo de envolver la enumeración en una clase pequeña Wrapper que implementa QueryStringBindable o PathBindable.

play framework - bind enum in routes

Cuestiones relacionadas