2009-09-28 73 views
4

有沒有辦法避免或設置模式來顯示更好的用戶友好的消息?模式驗證,如何顯示用戶友好的驗證消息?

我解析字符串並使用reg ex解釋它們,但可能有更好的方法。

Ex。

"cvc-complex-type.2.4.b: The content of element 'node' is not complete. One of '{\"\":offer,\"\":links}' is expected." 

相反,我想:

"The element 'node' is not complete. The child elements 'offer' and 'links' are expected." 

再次,我已經通過創建它驗證了一層額外的解決了這個問題。但是當我必須在模式驗證中使用XML工具時,crypt信息就是顯示的信息。

感謝

回答

0

我問一個similar question前一陣子。

我的結論是沒有提供映射錯誤的方法,而且這是您需要自己做的事情。

希望有人能做得更好!

+0

謝謝你,我很欣賞 – pribeiro 2009-09-28 20:03:13

3

不是我所知道的。您可能必須創建一些自定義代碼來適應您的錯誤消息。一種方法可能是定義一組正則表達式,這些正則表達式可以提取驗證器錯誤消息的相關部分,然後將它們插回到您自己的錯誤消息中。像這樣的東西出現在腦海(不優化,不處理一般的情況,等等,但我認爲你的想法):

String uglyMessage = "cvc-complex-type.2.4.b: The content of element 'node' is not complete. One of '{\"\":offer,\"\":links}' is expected."; 

String findRegex = "cvc-complex-type\\.2\\.4\\.b: The content of element '(\\w+)' is not complete\\. One of '\\{\"\":(\\w+),\"\":(\\w+)}' is expected\\."; 

String replaceRegex = "The element '$1' is not complete. The child elements '$2' and '$3' are expected."; 

String userFriendlyMessage = Pattern.compile(findRegex).matcher(uglyMessage).replaceAll(replaceRegex); 

System.out.println(userFriendlyMessage); 
// OUTPUT: 
// The element 'node' is not complete. The child elements 'offer' and 'links' are expected. 

我懷疑這些校驗錯誤消息是供應商特定的,所以如果你無法控制已部署應用程序中的XML驗證程序,這可能對您無效。

1

我們使用Schematron來向用戶顯示友好的錯誤消息,如果他發給我們的XML是錯誤的。我們目前的實現是一個有點簡單化,特別是在以下幾點:

  • 錯誤消息的文本hadcoded成的Schematron規則
  • 對於每一個新的XML類型(即新的XSD模式),需要手動添加Schematron的規則

然而,這可以很容易固定,通過以下返工:

  • 的Schematron規則應當有一個唯一的錯誤消息代碼,而實際我ssage文本選擇(包括的I18n問題)應該做出來的驗證框架範圍
  • 基本規則可以使用XSD到的Schematron轉換XSD架構生成(可在http://www.schematron.com/resources.html