liftweb - Zugriff auf GET / POST-Parameter
Frage
Wie ist es möglich, einfach Zugang zu erhalten und nach Attributen in Lift Rahmen innerhalb RestHelper? Es gibt keine keine expliziten Beispiele davon in der Dokumentation: (
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>
}
}
Ich möchte verstehen, wie Lift zeigen Wert von q
zu machen, wenn ich http://localhost:8080/api/static.xml?q=test
bin anfordernden
Lösung
Lift verwendet Box statt null, um anzuzeigen, wenn ein Parameter übergeben wurde. Dies ermöglicht die schöne Verwendung von Scala für das Verständnis der Kette zusammen ein schöner Request-Handler. Ich werde den Code für sich selbst sprechen lassen:
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>
}
}
Andere Tipps
Ich bin mir nicht sicher, aber können Sie versuchen, mit
S.param("param_name")
http://scala-tools.org/mvnsites-snapshots /liftweb/scaladocs/index.html
oder mit der erf Klasse
case r @ JsonPost("some" :: "path" :: _, json) => _ => {
r.param("name")
}
http://scala-tools.org/mvnsites-snapshots /liftweb/scaladocs/index.html
Bearbeiten : Ich habe dieses Beispiel ausgeführt wird:
package code.rest
import net.liftweb.http.rest._
object SampleRest extends RestHelper {
serve {
case Get("sample" :: _, req) =>
<hello>{req.param("name") getOrElse ("??") }</hello>
}
}
In Schnipsel, GET und POST-Parameter sind Teil des Schnipsel-Lebenszyklus. Lift-Attribute eine GUID der übergebenen Funktion SHtml.text (default, passedFunction) und kehrt Orte, die GUID im Namen Attribut des erzeugten HTML-Element. Wenn das Formular abgeschickt wird, sucht Heben Sie die GUID in der Funktionstabelle und ruft die Funktion mit dem übergebenen Parameter.
Weitere allgemeine Anfragen, öffnen Sie die Box:
val q = S.param("named_parameter") openOr ""
und man konnte ein Session-Variable für Stateful-Anforderungen festgelegt:
object myObject extends SessionVar[Box[Model]](Empty)