liftweb - доступ к параметрам get / post - PullRequest
11 голосов
/ 13 августа 2010

Как можно просто получить и получить и опубликовать атрибуты в рамках лифта внутри RestHelper?Никаких явных примеров в документации нет: (

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>

    }
}

Я хочу понять, как сделать значение lift show равным q при запросе http://localhost:8080/api/static.xml?q=test

Ответы [ 3 ]

23 голосов
/ 24 августа 2010

Lift использует Box вместо null, чтобы указать, был ли передан параметр. Это позволяет использовать Scala для удобного понимания, чтобы связать хороший обработчик запросов. Я позволю коду говорить за себя:

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>
  }

}
5 голосов
/ 13 августа 2010

Я не уверен, но можете ли вы попробовать с

S.param("param_name")

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

или с классом запроса

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

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

Редактировать : у меня запущен этот пример:

package code.rest

import net.liftweb.http.rest._

object SampleRest extends RestHelper {
  serve {
    case Get("sample" :: _, req) =>
        <hello>{req.param("name") getOrElse ("??") }</hello>
  }
}
2 голосов
/ 14 августа 2010

В фрагментах параметры Get и Post являются частью жизненного цикла фрагмента.Lift приписывает GUID функции, переданной в SHtml.text (defaultValue, passFunction), и возвращает места, которые GUID в атрибуте имени сгенерированного HTML-элемента.Когда форма отправлена, Lift ищет GUID в таблице функций и вызывает функцию с переданным параметром.

Для более общих запросов откройте окно:

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

, и вы можете установить переменную сеанса для запросов с состоянием:

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

...