2015-12-10 96 views
0

我有簡單的用戶註冊表單。這種形式有「年齡」這是整數。我創建了表單驗證器來驗證所有輸入。現在我遇到了「年齡」的問題。如果用戶在此字段中輸入字符串(而不是整數),Validator只是說有TypeMismatchresult.hasErrors()返回true。但我不知道如何訪問該字段的名稱,以便將錯誤傳回給JSP頁面並顯示相應的錯誤。我只能用訪問我的表單的名字:來自Spring表單驗證器的輸入的訪問名稱

if(result.hasErrors()) { 
      for(ObjectError error: result.getFieldErrors()) { 
       System.out.println(error.getObjectName());//returns form name not problematic field 
      } 
} 

所以我的問題:如何驗證程序內訪問字段名(具體輸入名稱)綁定錯誤特定的輸入?我需要它發送一些東西給用戶,說他正在與「年齡」擰。

+0

你爲什麼需要這個?有錯誤代碼註冊其中之一就像'formname.field.TypeMismatch'(或者是相反的方式)。基本上你想要的是已經支持開箱錯誤信息/綁定,所以不知道你爲什麼要解決這個問題。 –

+0

查看編輯的問題。我想發回一些東西給用戶。就像「你輸入了錯誤的年齡」。但是我無法在Validator中捕捉到這個條件。我的意思是我想不知何故條件:字段時間不匹配,併發送特定的錯誤到特定的輸入字段。 – ovod

+0

如前所述,默認情況下已經支持,因此我想知道爲什麼你要重新發明輪子並且圍繞框架而不是框架。 –

回答

1

使用框架不違背框架(另請參閱參考指南中的Errors Tag)。

首先創建一個包含您需要的錯誤代碼的屬性文件。在DefaultMessageCodesResolver中定義瞭如何生成錯誤代碼。基本上,它下面的

例如,代碼 「typeMismatch」 的情況下,對象名 「用戶」,現場 「年齡」:

  1. 嘗試 「typeMismatch.user.age」
  2. 嘗試 「typeMismatch.age」
  3. 嘗試 「typeMismatch.int」
  4. 嘗試 「typeMismatch」

現在假設您的模型名爲user,請將以下內容添加到屬性文件中(假定它的名稱爲messages.properties。)。

typeMismatch.user.age=Entered value is not a valid age. 
typeMismatch.int=Entered value is not an integer. 

現在刪除您的控制器你的代碼(離開hasError檢查,你可能要重新渲染頁面)。

在您的配置中爲DispatcherServlet定義MessageSource(如果您還沒有的話)。

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="baseName" value="messages" /> 
</bean> 
在JSP

現在只需添加<form:errors path="*" />在頂部和急,你就會有個錯誤在你的頁面。如果您願意,您可以考慮用戶語言的附加獎勵。

如果你想顯示錯誤旁邊的錯誤,你可能想要做這樣的事情。

<div> 
    <div><label for="age">Age</label></div> 
    <div><form:input path="age" id="age" /></div> 
    <div><form:errors path="age" cssClass="error" /></div> 
</div> 

現在錯誤呈現在字段後面。

有沒有必要自己搞砸這些事情。

+0

你的第一個選項完美地工作。 – ovod