ExternalContext.getRequestLocale()的实现

时间:2013-02-23 17:42:31

标签: java jsf jsf-2 implementation

出于好奇,在我的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

我在HttpServletRequestServletRequestWrapper中找不到此方法,其实现方式与ExternalContextImpl相同。

现在我在这里失去了赛道。我无法找到哪个类可以找到实际的实现。如果有人知道请帮助我理解。

1 个答案:

答案 0 :(得分:2)

HttpServletRequest扩展ServletRequest,提供getLocale()方法。

请参阅此处的javadoc:

http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getLocale()

javadocs说:

  

根据Accept-Language标头返回客户端将接受内容的首选语言环境。如果客户端请求未提供Accept-Language标头,则此方法返回服务器的默认语言环境。

我希望这会有所帮助:)