我有一个两阶段形式,我试图在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>
}
}
答案 0 :(得分:0)
典型的男生错误。来自“探索电梯书”:
如果form属性包含值“POST”或“GET”,则使用指定的提交方法将相应的表单标记发送到XHTML中。如果您从生成表单的代码段中忽略此标记,则会显示表单元素,但表单将不会提交。
我错过了html文件中的form="POST"
标记。因此表格没有被提交