2011-06-25 63 views
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> 
    } 
} 
+0

您應該創建一個簡化示例 –

+0

@ kim-stebel,上面應該是一個簡化示例。我試圖用錯誤語句進行一些調試,並且好像doSave()方法沒有被調用。我在addformphasetwo()內部但在doSave()之外放置了一個錯誤語句,並在控制檯上顯示。但是當我單擊提交按鈕時,控制檯上沒有顯示doSave()中的錯誤語句。 – Santiago

回答

0

典型的男生錯誤。從「Exploring Lift book」開始:

如果表單屬性包含「POST」或「GET」值,那麼將使用指定的提交方法將合適的表單標籤發送到XHTML中。如果你省略這個標籤來自一個生成表單的代碼片段,表單元素將會顯示,但表單不會提交

我錯過了我的html文件中的form="POST"標記。因此,表格並未被引用