0

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

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

4

1 回答 1

2

HttpServletRequestextendsServletRequest提供了getLocale()方法。

请参阅此处的 javadocs:

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

javadocs说:

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

我希望这有帮助 :)

于 2013-02-23T19:14:17.670 回答