2014-07-16 57 views
0

嗯,我曾與顯示在斯卡拉形式的錯誤是一個小問題,只顯示一個錯誤信息,上階形式

在我的斯卡拉形式爲個人場,我已經做了兩次檢查,如:

val startForm = Form(
     single(
      "fooField" -> text.verifying(LengthError, { Util.isLengthCorrect(_) }).verifying(EmptyError, { !_.isEmpty }), 
)) 

所以,當窗體中顯示錯誤信息時,如果兩個檢查標準都沒有填寫滿兩個錯誤信息,那麼應該只顯示一個錯誤信息。

嗯,我可能只顯示第一個錯誤,手動,像這樣:

@for(error <- startForm.errors("fooField")) { 
          <dd class="error">@Messages(error.message,0)</dd> 
          } 

但因爲我使用的形式助手,形式助手將顯示錯誤消息本身。那麼可以做些什麼來解決這個問題。

@Update:當然,我在這裏已經檢查如果fooFieldisEmptyisCorrectLength,而且我們應該檢查isCorrectLength僅如果該字段不爲空邏輯狀態。但還有其他條件,我需要兩個或更多fooField.verifying()我剛纔在這裏提出了一個簡單的例子,我的問題。

+0

如果你想使用表單助手只顯示一個錯誤,那可能是不可能的。你必須自己做。 –

回答

0

您將不得不創建自己的方式來編寫兩個Constraint [T],它只會在第一個通過時評估第二個。類似這樣的:

def oneAtATime[T](first: Constraint[T], second: Constraint[T]) = 
    new Constraint[T](None, Seq()) { t: T => 
    first(t) match { 
     case Valid => second(t) 
     case other => other 
    } 
    }