У меня есть двухэтапная форма, которую я пытаюсь реализовать в 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>
}
}