出于好奇,在我的JSF 2.0应用程序中使用Locale时,我试图阅读getRequestLocale()
方法ExternalContext
的实现逻辑。
javax.faces.context.ExternalContext
是一个抽象类。我发现了
com.sun.faces.context.ExternalContextImpl
javax.faces.context.ExternalContextWrapper
com.sun.faces.config.InitFacesContext$ServletContextAdapter
扩展了这个类。
其中,类ServletContextAdapter
的此方法的实现返回null。所以我想这对我没用。
ExternalContextImpl
中此方法的实现是:
public Locale getRequestLocale(){
return this.request.getLocale();
}
在ExternalContextWrapper
中是:
public Locale getRequestLocale() {
return getWrapped().getRequestLocale();
}
在ExternalContextWrapper
的实施过程中,getWrapped()
会返回一个实例ExternalContext
。我猜它实际上可能是ExternalContextImpl
对象。
在ExternalContextImpl
this.request
中实施此方法实际上是javax.servlet.ServletRequest
。
现在ServletRequest
是一个由
javax.servlet.ServletRequestWrapper
并由javax.servlet.http.HttpServletRequest
。 我在HttpServletRequest
和ServletRequestWrapper
中找不到此方法,其实现方式与ExternalContextImpl
相同。
现在我在这里失去了赛道。我无法找到哪个类可以找到实际的实现。如果有人知道请帮助我理解。
答案 0 :(得分:2)
HttpServletRequest
扩展ServletRequest
,提供getLocale()
方法。
请参阅此处的javadoc:
http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getLocale()
javadocs说:
根据Accept-Language标头返回客户端将接受内容的首选语言环境。如果客户端请求未提供Accept-Language标头,则此方法返回服务器的默认语言环境。
我希望这会有所帮助:)