2014-07-16 32 views
5

是否可以定義應該加載的默認語言環境,以防用戶設置?lang = unknownlang定義默認語言環境並處理Spring語言環境攔截器的異常

在我爲spring-servlet.xml我有:?

<bean id="localeChangeInterceptor" 
    class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
    <property name="paramName" value="lang" /> 
</bean> 

<bean id="localeResolver" 
    class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> 
    <property name="defaultLocale" value="pt" /> 
</bean> 

另外,如果我指定我的網址PARAM像郎= P @ T無效字符,春天拋出應該處理的異常,會怎樣我去解決這個問題?

Error 500: org.springframework.web.util.NestedServletException: Request processing failed&#59; nested exception is java.lang.IllegalArgumentException: Locale part &quot;&#39;&quot; contains invalid characters 

回答

0

我設法解決了這些問題。

關於默認語言環境,只要資源包中有默認的.properties文件,spring就會在內部解決這個問題。

所以在我的情況下,必須有一個xxx_pt.properties xxx_en.properties和一個xxx.properties。

對於異常處理其實我不得不重寫LocaleChangeInterceptor類的preHandle方法和捕捉到了異常:

爲spring-servlet.xml

<bean id="localeChangeInterceptor" 
    class="com.xxx.xxx.LanguageExceptionHandler"> 
    <property name="paramName" value="lang" /> 
</bean> 

LanguageExceptionHandler.java

public class LanguageExceptionHandler extends LocaleChangeInterceptor { 
    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { 
     try { 
      super.preHandle(request, response, handler); 
     } catch (ServletException e) { 
      DebugLogger.writeError("ServletException", e); 
     } catch (IllegalArgumentException e) { 
      DebugLogger.writeError("IllegalArgumentException", e); 
     } 
     return true; 
    } 
} 

儘管根據t o this,無效字符在新版本的Spring中應該以不同的方式處理。

+1

我有像messages.properties,messages_en-IN.properties和messages_en-HI.properties文件...我應該在哪裏寫和運行LanguageExceptionHandler代碼?我用xml(不是java配置)使用spring我的錯誤是「java.lang.IllegalArgumentException:Locale part」en-IN「」 – swapyonubuntu