根据提供的文件信息,我们可以从标题、描述以及部分给出的内容中提炼出有关Struts2框架的基础知识点。以下是对这些信息的详细解析与扩展:
### Struts2框架基础
#### 一、Struts2中的类型转换机制
Struts2框架提供了一种强大的类型转换机制,能够自动将请求参数转换为Action类属性的类型。这一机制主要通过两个核心组件来实现:`DefaultTypeConverter` 和 `StrutsTypeConverter`。
- **`DefaultTypeConverter`**:负责处理基本类型的转换。
- **`StrutsTypeConverter`**:则用于处理更复杂的对象类型转换,如日期、自定义对象等。
为了更好地支持类型转换,Struts2允许开发者通过配置文件来指定特定类型的转换规则。具体来说,可以利用 `conversion.properties` 文件来定义转换逻辑,例如:
```properties
# conversion.properties 示例
com.bean.Point=com.converter.PointConverter
```
这行配置意味着,当Struts2遇到名为 `Point` 的类型时,会使用 `PointConverter` 类来进行转换。
此外,在实际应用中还需要注意的一点是,如果某个Action没有默认的结果视图,则需要在配置文件中进行相应的处理,以避免运行时出现错误。
#### 二、Action的验证机制
Struts2提供了一个强大的验证框架,它可以通过多种方式来实现对Action数据的验证,包括在Action类中直接实现 `validate()` 方法、通过XML文件来定义验证规则等。
- **在Action类中实现 `validate()` 方法**:
```java
public void validate() {
if (null == point) {
addFieldError("point", "点坐标不能为空");
}
}
```
在这里,我们通过调用 `addFieldError` 方法来添加字段级别的错误信息。
- **在JSP页面中展示错误信息**:
```jsp
<s:fieldError fieldName="point"/>
```
- **Struts2内置的输入结果视图**:如果验证失败,Struts2会自动转向一个名为 `input` 的结果视图,通常用来显示表单并呈现验证错误信息。
- **无默认结果的处理**:当Action没有默认的结果时,Struts2会抛出异常。为了避免这种情况,可以在配置文件中为每个Action指定至少一个默认结果。
#### 三、日期类型转换与验证示例
在某些场景下,可能需要对日期类型的数据进行转换与验证。例如,确保用户的出生日期早于毕业日期,可以采用以下方法:
```java
public void validate() {
Calendar c1 = Calendar.getInstance();
c1.setTime(birthday);
Calendar c2 = Calendar.getInstance();
c2.setTime(graduation);
if (!c1.before(c2)) {
addFieldError("birthday", "出生日期应该早于毕业日期");
}
}
```
这里首先获取当前时间的实例,然后分别设置为用户的出生日期和毕业日期,最后比较两个日期的先后顺序。
#### 四、国际化资源文件的配置
为了使应用程序支持多语言环境,Struts2提供了国际化支持。具体来说,可以通过配置文件来指定国际化的资源文件,例如在 `struts.xml` 文件中配置:
```xml
<constant name="struts.custom.i18n.resources" value="message"/>
```
然后,在类路径下创建 `message.properties` 文件来存储各种语言版本的消息:
```properties
# message.properties 示例
xwork.default.invalid.fieldvalue={0} 错误
```
#### 五、基于XML的验证规则
除了在Action类中直接实现 `validate()` 方法外,还可以通过XML文件来定义验证规则。例如,在 `PointAction-validation.xml` 文件中定义验证逻辑:
```xml
<!DOCTYPE validators PUBLIC "-//Apache Software Foundation//DTD Struts Validator 1.0.2//EN" "http://struts.apache.org/dtds/struts-validator-1.0.dtd">
<validators>
<field name="age">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>年龄不能为空</message>
</field-validator>
</field>
</validators>
```
这里定义了对 `age` 字段的验证规则,要求该字段不能为空,并指定了错误消息。
Struts2框架提供了一系列强大的特性来支持Web开发,包括类型转换、验证机制以及国际化支持等。通过对这些特性的合理利用,可以大大提高开发效率和代码质量。