Pregunta

Tengo una aplicación mediante el Juego!marco.Estoy enlazando las variables a las plantillas y la construcción de lo que podría ser un salvavidas rasgo para Jugar!: https://github.com/asinghal/Play-ScalaGen/blob/master/misc_utils/EmailNotifier.scala

var templateHtmlBinding = new java.util.HashMap[String, Object]()
    var templateTextBinding = new java.util.HashMap[String, Object]()

    for (o <- args) {
      val names = LocalVariablesNamesTracer.getAllLocalVariableNames(o).toList
      for (name <- names) {
        templateHtmlBinding += (name -> o)
        templateTextBinding += (name -> o)
      }
    }

El problema es que al hacer un getAllLocalVariableNames en line 155 la lista completa devuelve un vacío.Puedo confirmar que los objetos se pasa a la función son nulas, según lo verificado por la impresión de los mismos en el interior de la función.Me pregunto si hay algo mal uso de este en la Scala o si alguien sabe de un método de reflexión que podría hacer el trabajo?

Editar

Estoy tratando un poco de reflexión, pero mi reflexión el conocimiento es algo limitado.Un ejemplo:

val names = o.getClass.getMethods.toList.map(_.toString)

Salida a partir de una muestra de objetos de pasado:

List(public java.lang.String models.Account.name(), public static final scala.Op
tion models.Account.get(long), public boolean models.Account.equals(java.lang.Ob...

Alguna idea de cómo filtrar esta más?

Segunda Edición

He llegado a este punto que logró que produce una lista de cada uno de los objetos y sus propiedades, pero, por desgracia, todavía desencadena el mismo error con una poblada lista:

val oname = o.getClass.getName.replaceAll("models.","").toLowerCase
val names = o.getClass.getDeclaredFields.toList.map(_.getName.toString).map(oname+"."+_)

da:

List(account.id, account.name, account.address,...

Alguna idea sobre donde algo va mal en el Juego!plantillas?

¿Fue útil?

Solución

Como en Edit 2, pude obtener los nombres de propiedad de cada objeto que pasaron. Sin embargo, el problema que tuve fue causado por la clase misma, por lo que modifiqué un par de cosas para solucionarlo. Creé esto:

for ((name:String, o:Object) <- args) {
  templateHtmlBinding += (name -> o)
  templateTextBinding += (name -> o)
}

y reemplazaron las líneas 153-159:

for (o <- args) {
      var names = LocalVariablesNamesTracer.getAllLocalVariableNames(o).toList
      for (name <- names) {
        templateHtmlBinding += (name -> o)
        templateTextBinding += (name -> o)
      }
    }

¡Parece que no puedes obtener nombres de variables si quieres expandirte fuera del juego! controladores y desordenarse. Entonces, una solución es simplemente pasar los nombres de variables de plantilla como este:

mail.send("app/views/Mails/invite", "account"->account, "user"->user )

y referencia en su plantilla como:

${account.name}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top