提升Scala - 重定向不适用于两个阶段形式

时间:2011-06-25 16:54:43

标签: forms scala lift

我有一个两阶段形式,我试图在Lift Scala中实现。我有表格的第一阶段工作,但第二阶段没有按预期工作。

第一个表单要求用户提供一些输入,在提交时,这将使用户转到第二个表单,其中显示了第一个表单中的详细信息。用户可以在文本字段中输入一些文本,然后单击“提交”以查看表单结果。第二种形式应该可供任何其他用户使用,以便他们可以输入初始用户给出的标题的描述。

它的工作方式如下 - 用户1添加标题(表单第一阶段),另一个用户可以输入描述(表单第二阶段),然后提交表单以查看结果。但是,当用户在表单第二阶段输入说明并单击提交时 - 没有任何反应。没有重定向,也没有错误。

非常感谢任何帮助。

我的代码如下,这是正确的方法吗?

class TwoPhaseForm extends DispatchSnippet with Logger {
  def dispatch : DispatchIt = {
    case "addformphaseone" => addformphaseone _
    case "viewformphaseone" => viewformphaseone _
    case "addformphasetwo" => addformphasetwo _
    case "viewresults" => viewresults _
  }

  object currentAccountVar extends RequestVar[Entry]({
    Entry.create.author(User.currentUser.open_!)
  })

  def currentAccount = currentAccountVar.is

  //The first part of the form
  def addformphaseone (xhtml : NodeSeq) : NodeSeq = {
    def doSave () = {
      currentAccount.validate match {
        case Nil =>
          currentAccount.save
          S.redirectTo("/viewformphaseone?id=" + currentAccount.id)
        case x => S.error(x)
      }
    }

    val acct = currentAccount

    bind("entry", xhtml,
         "id" -> SHtml.hidden(() => currentAccountVar(acct)),
         "title" -> SHtml.text(currentAccount.title.is, currentAccount.title(_)),
         "submit" -> SHtml.submit("Submit", doSave))
  }

  //view the details from form phase one
  def viewformphaseone(xhtml : NodeSeq) : NodeSeq = {
    val t = Entry.find(S.param("id"))
        t.map(t =>
          bind("entry", xhtml,
           "title" -> t.title.toString,
                )) openOr <span>Not found!</span> <b>Not found!</b>
    }

  //Second phase of the form 

  def addformphasetwo (xhtml : NodeSeq) : NodeSeq = {
    def doSave () = {
      currentAccount.validate match {
        case Nil =>
          currentAccount.save
          S.redirectTo("/results")
        case x => S.error(x)
      }
    }
    val t = Entry.find(S.param("id"))
        t.map(t =>
          bind("entry", xhtml,
          "desc" -> SHtml.text(currentAccount.desc.is, currentAccount.desc(_)),
           "submit" -> SHtml.submit("Submit", doSave) 
                )) openOr <span>Not found!</span> <b>Not found!</b>
  }

  //view the results from both forms
  def viewresults(xhtml : NodeSeq) : NodeSeq = {
    val t = Entry.find(S.param("id"))
        t.map(t =>
          bind("entry", xhtml,
           "title" -> t.title.toString,
           "desc" -> t.desc.toString,
                )) openOr <span>Not found!</span> <b>Not found!</b>
    }
}

1 个答案:

答案 0 :(得分:0)

典型的男生错误。来自“探索电梯书”:

  

如果form属性包含值“POST”或“GET”,则使用指定的提交方法将相应的表单标记发送到XHTML中。如果您从生成表单的代码段中忽略此标记,则会显示表单元素,但表单将不会提交

我错过了html文件中的form="POST"标记。因此表格没有被提交