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

War es hilfreich?

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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top