0
我有一個兩階段的形式,即時嘗試在電梯斯卡拉實施。我有第一階段的表格工作,但第二階段沒有按預期工作。電梯斯卡拉 - 重定向不工作兩個階段形式
第一種形式要求用戶輸入一些信息,在提交時這將使用戶轉到第二種形式,並顯示第一種形式的細節。用戶可以在文本框中輸入一些文本,然後單擊提交查看錶單結果。第二種形式應該提供給任何其他用戶,以便他們可以輸入由初始用戶給出的標題的描述。
它的工作方式如下 - 用戶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>
}
}
您應該創建一個簡化示例 –
@ kim-stebel,上面應該是一個簡化示例。我試圖用錯誤語句進行一些調試,並且好像doSave()方法沒有被調用。我在addformphasetwo()內部但在doSave()之外放置了一個錯誤語句,並在控制檯上顯示。但是當我單擊提交按鈕時,控制檯上沒有顯示doSave()中的錯誤語句。 – Santiago