Java ExternalContext.getRequestLocale()的实现

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

出于好奇,在我的JSF 2.0应用程序中使用Locale时,我试图阅读
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的一个分支。我认为这应该是实施: