使用链接提升传递数据

时间:2011-06-30 14:51:22

标签: scala lift

使用链接传递数据的“最佳”方法是什么?

目前我将数据保存在SessionVAr中并在另一侧将其取出。但这感觉非常笨拙。还有其他办法吗?

object activeHw extends SessionVar[Box[Hw]](Empty)

object AddHwScreen extends LiftScreen {
  object hw extends ScreenVar(activeHw.is.getOrElse(Hw.createRecord))
  addFields(() => hw.is)
  def finish() = {
    redirectTo("/hw")
  }
}

class HwSnippet extends StatefulSnippet with PaginatorSnippet[Hw] {
  var dispatch: DispatchIt = {
    case "showAll" => showAll _
  }

  def showAll(xhtml: NodeSeq): NodeSeq = {
    page.flatMap(hw => {
      (".hwDetail *" #> link ("hw/detail", () => activeHw.set(Full(hw)), Text("Detail")) &
       ".hwSn *" #> hw.sn).apply(xhtml)
    })
  }

  def redirectToHome = {
    redirectTo("/hw")
  }
}

2 个答案:

答案 0 :(得分:3)

如果你有:

object MyInfo extends RequestVar("nothing")

然后:

val str = (new java.util.Date).toString
S.redirectTo("/", () => MyInfo.set(str))

通过在执行redirectTo之前计算它来捕获值,然后执行将RequestVar设置为值的函数。 RequestVar可以被目标页面访问。

答案 1 :(得分:1)

如果它在SessionVar中,那么就不需要在链接中传递它。只需在下一个代码段中访问它。

更新抱歉,我误解了您的问题。您已经这样做但宁愿在链接上传递它(作为查询参数?)。通常,这不是提升方式:有人可以更改值等。如果您真的想要,可以向链接添加查询参数,然后使用S.param("the-name")在下一个代码段中访问它。 / p>