2011-04-20 73 views
5

我想使用Spring本地化從POJO類拋出的異常消息。我有一個Spring MVC應用程序,我可以通過它來添加書籍。如果添加的書的標題爲空,則實現類將引發一個異常。我想將其本地化。使用Spring本地化異常消息

我知道我可以在JSP頁面中使用localeResolvers,並且我已經完成了。我可以利用這個來獲取POJO中的本地化錯誤消息嗎?如果是的話,我該如何將Cookie/Session設置的區域設置解析器(Cookie或Session)或區域設置注入到POJO類中?

addBook方法引發異常

public void addBook(IBook book) throws Exception { 
    if (book.getTitle() == null || book.getTitle() == "") { 
     throw new Exception("Title is null"); 
    } 

我想throw new Exception("Title is null");是像

String msg = rBundle.getMessage(propKey) 
throw new Exception(msg); 

其中rBundle是它知道它的區域設置和屬性文件束對象從它應該選擇爲propKey

接收表單提交我的控制器類方法

@RequestMapping(method = RequestMethod.POST) 
public String processSubmit(
     @RequestParam("siteLanguage") String siteLanguage, 
     @ModelAttribute("book") Book book, BindingResult result, 
     SessionStatus status, HttpServletRequest arg0) { 
    logger.debug("Adding a Book"); 
    Locale loc = RequestContextUtils.getLocale(arg0); 

    if (result.hasErrors()) { 
     return "error.htm"; 
    } else { 
     try { 
      Author author = new Author("Gabriel Garcia Marquez"); 
      book.setAuthor(author); 
      library.addBook(book); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return "redirect:home.htm"; 
    } 
} 

這可能嗎?還是更好,我控制了相應語言環境的Java ResourceBundle加載。

感謝

回答

3

你爲什麼要本地化異常?:我猜異常存儲在日誌文件中,管理員應該能夠閱讀,無須所有用戶使用的語言的知識。

如果你在談論表單驗證,那麼看看spring表單驗證和jsr303 bean驗證,都包括本地化的概念。 (但兩者都不適用於例外情況。)

+0

某些異常消息會傳播到UI上,這就是爲什麼我們需要將它們本地化。 – 2011-04-21 05:35:46

+3

在這種情況下,我建議在您的例外中使用消息代碼。但正如我所知道的那樣,異常本地化是一個架構決策,因此您需要從項目開始時的指定方式進行。稍後改變架構決定,在大多數情況下是非常昂貴的。 – Ralph 2011-04-21 06:40:38