在struts2中可以在struts.properties文件中设置default local。如:struts.locale=zh_CN
查看源代码发现他是通过annotation Inject来设置的。
@Inject(value=StrutsConstants.STRUTS_LOCALE, required=false)
public static void setDefaultLocale(String val) {
defaultLocale = val;
}
public static final String STRUTS_LOCALE = "struts.locale";
接下来我们看一下它是怎么通过annotation来设置的呢。先调用addInjectorsForMembers()方法拿到有inject标签的方法,然后调用 injector.inject(context, null);方法。
void injectStatics(List<Class<?>> staticInjections) {
final List<Injector> injectors = new ArrayList<Injector>();
for (Class<?> clazz : staticInjections) {
addInjectorsForFields(clazz.getDeclaredFields(), true, injectors);
addInjectorsForMethods(clazz.getDeclaredMethods(), true, injectors);
}
callInContext(new ContextualCallable<Void>() {
public Void call(InternalContext context) {
for (Injector injector : injectors) {
injector.inject(context, null);
}
return null;
}
});
}
void addInjectorsForFields(Field[] fields, boolean statics,
List<Injector> injectors) {
addInjectorsForMembers(Arrays.asList(fields), statics, injectors,
new InjectorFactory<Field>() {
public Injector create(ContainerImpl container, Field field,
String name) throws MissingDependencyException {
return new FieldInjector(container, field, name);
}
});
}
//通过member.getAnnotation(Inject.class);方法拿到那些有Inject标签的方法,然后保存在
injectors里面。
<M extends Member & AnnotatedElement> void addInjectorsForMembers(
List<M> members, boolean statics, List<Injector> injectors,
InjectorFactory<M> injectorFactory) {
for (M member : members) {
if (isStatic(member) == statics) {
Inject inject = member.getAnnotation(Inject.class);
if (inject != null) {
try {
injectors.add(injectorFactory.create(this, member, inject.value()));
} catch (MissingDependencyException e) {
if (inject.required()) {
throw new DependencyException(e);
}
}
}
}
}
}
然后在inject方法里面调用 method.invoke()方法,此处method是定义了inject的标签,此处是setDefaultLocale方法getParameters(method, context, parameterInjectors)返回参数,此处为‘zh_CN’。这样就通过反射设置进去了。
public void inject(InternalContext context, Object o) {
try {
method.invoke(o, getParameters(method, context, parameterInjectors));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
总结:此处涉及了两个方面,一是annotation的使用,二是反射的使用。这两个知识点都很常用。比如我上次做的为了减少struts的配置,用annotation标识那些类是Action类。struts.locale=zh_CN 中的配置应该和用户浏览器的配置一样,不然就会发生将string转成时间格式不匹配的错误
分享到:
相关推荐
本教程将深入讲解如何在Struts2框架中实现中英文切换功能。 1. **创建资源文件**: 在Struts2国际化过程中,关键在于使用资源文件来存储不同语言的文本。资源文件通常命名为`XX.properties`,其中`XX`代表语言代码...
若需要实现自定义的配置管理器,则需创建一个实现了`Configuration`接口的类,并在类中实现Struts 2配置文件的加载逻辑。 #### struts.locale 此属性指定了Web应用的默认Locale设置,用于确定应用的语言环境和区域...
在Struts2中,配置是至关重要的,因为它们定义了框架的行为和交互方式。以下是一些关于Struts2常量的详细解释: 1. **struts.configuration**: 这个属性定义了配置文件管理器,负责加载Struts2的配置文件。默认值是...
- 使用`<package>`中的`defaultLocale`属性来指定包级别的默认语言环境。 - 可以通过`<result>`标签中的`type`属性设置国际化资源文件,以便在特定的结果类型下使用相应的语言资源。 #### 三、后端实现国际化 1....
6.7.2 Struts 2中常用的表达式语言特性 131 6.7.3 表达式语言的高级特性 135 6.8 小结 137 第7章 UI组件标签 139 7.1 为什么需要UI组件标签 139 7.2 标签、模板和主题 144 7.2.1 标签 146 7.2.2 模板 146 7.2.3 ...
- **默认值**:`org.apache.struts2.config.DefaultConfiguration`,这是Struts2默认使用的配置文件管理器。 - **自定义**:如果需要实现自定义的配置管理器,开发者需要创建一个实现了`Configuration`接口的类来...
下面我们将深入探讨如何在Struts2中实现国际化和多语言切换。 **一、国际化(i18n)基础** 国际化是指软件设计时考虑到不同地区的文化差异,使得软件可以通过简单的配置和扩展就能适应各种语言环境。在Java中,我们...
本文将重点介绍Struts2中常用的配置常量,这些常量在项目的初始化配置文件(通常是`struts.xml`)中定义,用于控制框架的行为和功能。 #### 二、Struts2常用配置常量 1. **`struts.i18n.encoding`** - **作用**...
本文将深入解析Struts 2中的关键属性,这些属性在项目配置中扮演着核心角色,对理解框架行为、优化性能以及定制化需求具有重要意义。 ### Struts 2 的关键属性详解 #### 1. struts.configuration 此属性用于指定...
如果你还没有集成,需要在项目的`pom.xml`或者`build.gradle`文件中添加Struts2的依赖。Struts2的核心库包含了处理国际化需求的组件。 二、创建资源文件 1. 创建资源文件:在src/main/resources目录下创建一个名为`...
- 测试国际化功能时,可以模拟不同的浏览器设置,或者使用`java.util.Locale.setDefault()`临时改变应用的默认`Locale`。 以上就是关于Struts1.x国际化的基本概念和实现方式。通过理解这些知识点,开发者能够构建...
- `struts.configuration`: 指定Struts 2的配置类,默认为`DefaultConfiguration`。 - `struts.locale`: 设置默认的国际化地区信息,例如`en_US`。 - `struts.i18n.encoding`: 设置国际化信息的编码,如`UTF-8`。 - ...
ResourceBundle bundle = ResourceBundle.getBundle("com.example.messages", Locale.getDefault(), new UTF8Control()); ``` 其中`UTF8Control`是一个自定义的`PropertiesControl`实现,用于指定加载`....
在Struts2框架中,`struts.xml` 文件扮演着至关重要的角色,它不仅负责配置应用的基本信息,还允许开发者通过一系列的常量(constant)来定制Struts2的行为。这些常量能够帮助我们更加灵活地控制框架的行为特性,...
在JSP(JavaServer Pages)环境中,结合Struts框架,我们可以实现用户端上传图片并进行压缩的功能。以下是对这个主题的详细阐述: 一、图片上传原理 图片上传的核心在于前端与后端的交互。前端通过HTML表单提供一个...
所有已实现的接口: Action, LocaleProvider, TextProvider, Validateable, ValidationAware, Serializable 直接已知子类: DefaultActionSupport ----------------------------------------------------------...
如果使用的是Struts2框架,还需要调整其默认字符集以支持UTF-8。可以在`struts.xml`配置文件中添加如下配置: ```xml <constant name="struts.multipart.parser" value="commons" /> <constant name="struts....