Lift Scala - Перенаправление не работает для двухфазной формы - PullRequest
0 голосов
/ 25 июня 2011

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

типичная ошибка школьника.из «Книги изучения лифта»:

Если атрибут формы включен со значением «POST» или «GET», то соответствующий тег формы будет передан в XHTML с использованием указанногоспособ подачи.Если вы опустите этот тег из фрагмента, который генерирует форму, элементы формы будут отображаться, но форма не будет отправлена ​​.

Я пропустилтег form="POST" в моем HTML-файле.Следовательно, форма не была отправлена ​​

...