Java ExternalContext.getRequestLocale()的实现
出于好奇,在我的JSF 2.0应用程序中使用Locale时,我试图阅读Java ExternalContext.getRequestLocale()的实现,java,jsf,jsf-2,implementation,Java,Jsf,Jsf 2,Implementation,出于好奇,在我的JSF 2.0应用程序中使用Locale时,我试图阅读ExternalContext的方法getRequestLocale()的实现逻辑 javax.faces.context.ExternalContext是一个抽象类。我发现 com.sun.faces.context.ExternalContextImpl javax.faces.context.ExternalContextWrapper com.sun.faces.config.InitFacesContext$Ser
ExternalContext
的方法getRequestLocale()
的实现逻辑
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();
}
public Locale getRequestLocale() {
return getWrapped().getRequestLocale();
}
而在ExternalContextWrapper
中是:
public Locale getRequestLocale(){
return this.request.getLocale();
}
public Locale getRequestLocale() {
return getWrapped().getRequestLocale();
}
在通过ExternalContextWrapper
实现的过程中,getWrapped()
返回一个实例ExternalContext
。我猜它实际上可能是ExternalContextImpl
对象
在ExternalContextImpl
中实现此方法时,此.request
实际上是javax.servlet.ServletRequest
现在,ServletRequest
是一个由
并扩展为javax.servlet.ServletRequestWrapper
李>javax.servlet.http.HttpServletRequest
HttpServletRequest
和ServletRequestWrapper
中没有找到此方法,其实现与ExternalContextImpl
的实现相同
现在我迷失了方向。我无法找到在哪个类中可以找到实际的实现。如果有人知道,请帮助我理解。
HttpServletRequest
扩展了ServletRequest
,它提供了getLocale()
方法
请参见此处的javadocs:
javadocs说:
根据accept Language标头返回客户端将接受内容的首选区域设置。如果客户端请求未提供Accept Language标头,则此方法将返回服务器的默认语言环境
我希望这有帮助:)谢谢你的回答。正如我在问题中所说,在
javax.servlet.http.HttpServletRequest
中没有这样的方法的实现。实际上,它是一个带有签名的接口公共抽象接口HttpServletRequest扩展了ServletRequest
。当然。但你现在的问题到底是什么?是否要查看ServletRequest.getLocale()的实现?此方法在您使用的容器中实现。所以你得看看那里。然而,我认为这个方法最重要的一点是在javadocs中提到的。所以应该很清楚它是做什么的。是的,我想看看ServletRequest.getLocale()
。正如您所说,这个方法是由我使用的容器JBossAS7实现的。你知道从哪里可以得到这个实现吗?AS7使用JBoss Web,这是ApacheTomcat的一个分支。我认为这应该是实施: