2010-08-13 23 views
11

¿Cómo es posible simplemente acceder para obtener y publicar atributos en Lift Framework dentro de RestHelper? No hay ningún ejemplo explícito al respecto en la documentación :(liftweb - accediendo a los parámetros get/post

package my.domain 

import net.liftweb.http._ 
import net.liftweb.http.rest._ 
import net.liftweb.json.JsonAST._ 
import net.liftweb.json._ 
import net.liftweb.common.{Box,Full,Empty,Failure,ParamFailure} 
import net.liftweb.mapper._ 


import ru.dmteam.model.{RssItem} 

object ContentRest extends RestHelper { 


    def getq: String = { 
     val q = S.param("q") 
     q.toString 
    } 

    serve { 
     case "api" :: "static" :: _ XmlGet _=> <b>{getq}</b> 

    } 
} 

Quiero entender cómo hacer que el valor de elevación muestra de q cuando estoy solicitando http://localhost:8080/api/static.xml?q=test

Respuesta

23

Ascensor utiliza la caja en lugar de nulo para indicar si se pasó un parámetro Esto permite el buen uso de Scala's para la comprensión para encadenar un buen controlador de solicitudes. Dejaré que el código hable por sí mismo:

object MyRest extends RestHelper { 
    // serve the q parameter if it exists, otherwise 
    // a 404 
    serve { 
    case "api" :: "x1" :: _ Get _ => 
     for { 
     q <- S.param("q") 
     } yield <x>{q}</x> 
    } 

    // serve the q parameter if it exists, otherwise 
    // a 404 with an error string 
    serve { 
    case "api" :: "x2" :: _ Get _ => 
     for { 
     q <- S.param("q") ?~ "Param 'q' missing" 
     } yield <x>{q}</x> 
    } 

    // serve the q parameter if it exists, otherwise 
    // a 401 with an error string 
    serve { 
    case "api" :: "x2" :: _ Get _ => 
     for { 
     q <- S.param("q") ?~ "Param 'q' missing" ~> 401 
     } yield <x>{q}</x> 
    } 

    // serve the q, r, s parameters if this exists, otherwise 
    // different errors 
    serve { 
    case "api" :: "x3" :: _ Get _ => 
     for { 
     q <- S.param("q") ?~ "Param 'q' missing" ~> 401 
     r <- S.param("r") ?~ "No 'r'" ~> 502 
     s <- S.param("s") ?~ "You're s-less" ~> 404 
     } yield <x><q>{q}</q><r>{r}</r><s>{s}</s></x> 
    } 

} 
+0

buen ejemplo! Gracias. –

5

No estoy seguro, pero puede usted tratar con

S.param("param_name") 

http://scala-tools.org/mvnsites-snapshots/liftweb/scaladocs/index.html

o con la clase req

case r @ JsonPost("some" :: "path" :: _, json) => _ => { 
    r.param("name") 
} 

http://scala-tools.org/mvnsites-snapshots/liftweb/scaladocs/index.html

Editar: Tengo esta muestra en ejecución:

package code.rest 

import net.liftweb.http.rest._ 

object SampleRest extends RestHelper { 
    serve { 
    case Get("sample" :: _, req) => 
     <hello>{req.param("name") getOrElse ("??") }</hello> 
    } 
} 
+0

He actualizado la publicación. S.param ("q"). ToString ya está devolviendo "Vacío" ... –

2

En fragmentos, Get y parámetros POST son parte del ciclo de vida del fragmento. Lift atribuye un GUID a la función que se pasa a SHtml.text (defaultValue, passedFunction) y devuelve lugares que GUID en el atributo de nombre del elemento HTML generado. Cuando se envía el formulario, Levante busca el GUID en la tabla de funciones y llama a la función con el parámetro pasado.

Para solicitudes más generales, abrir la caja:

val q = S.param("named_parameter") openOr ""

y podría establecer una variable de sesión para solicitudes con estado:

object myObject extends SessionVar[Box[Model]](Empty)

+0

No tengo ningún código html. Estoy escribiendo el servicio json/xml-rest y necesito poder leer los parámetros enviados manualmente a mi aplicación de elevación. –

+3

En este caso, el póster buscaba obtener parámetros de solicitud como parte del manejo de REST. Mientras que el código de generación de formularios de Lift generará código con GUID únicos para los elementos del formulario (puede hacerlo a la antigua si lo desea), eso no es aplicable a las llamadas REST donde la API define los parámetros de consulta. La pregunta era cómo obtener esos parámetros de consulta. S.param es la respuesta correcta, pero devuelve un cuadro [String] que estará vacío si el parámetro de consulta no se suministró o completo (valor) si lo fuera. –

Cuestiones relacionadas