- 浏览: 1524920 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (525)
- SEO (16)
- JAVA-EE-Hibernate (6)
- JAVA-EE-Struts (29)
- JAVA-EE-Spring (15)
- Linux (37)
- JAVA-SE (29)
- NetWork (1)
- CMS (14)
- Semantic Research (3)
- RIA-Flex (0)
- Ajax-Extjs (4)
- Ajax-Jquery (1)
- www.godaddy.com (0)
- SSH (34)
- JavaScript (6)
- SoftwareEngineer (9)
- CMMI (0)
- IDE-Myeclipse (3)
- PHP (1)
- Algorithm (3)
- C/C++ (18)
- Concept&Items (2)
- Useful WebSite (1)
- ApacheServer (2)
- CodeReading (1)
- Socket (2)
- UML (10)
- PowerDesigner (1)
- Repository (19)
- MySQL (3)
- SqlServer (0)
- Society (1)
- Tomcat (7)
- WebService (5)
- JBoss (1)
- FCKeditor (1)
- PS/DW/CD/FW (0)
- DesignPattern (11)
- WebSite_Security (1)
- WordPress (5)
- WebConstruction (3)
- XML|XSD (7)
- Android (0)
- Project-In-Action (9)
- DatabaseDesign (3)
- taglib (7)
- DIV+CSS (10)
- Silverlight (52)
- JSON (7)
- VC++ (8)
- C# (8)
- LINQ (1)
- WCF&SOA (5)
- .NET (20)
- SOA (1)
- Mashup (2)
- RegEx (6)
- Psychology (5)
- Stock (1)
- Google (2)
- Interview (4)
- HTML5 (1)
- Marketing (4)
- Vaadin (2)
- Agile (2)
- Apache-common (6)
- ANTLR (0)
- REST (1)
- HtmlAnalysis (18)
- csv-export (3)
- Nucth (3)
- Xpath (1)
- Velocity (6)
- ASP.NET (9)
- Product (2)
- CSS (1)
最新评论
-
lt26w:
理解成门面模式应该比较容易明白吧
FacadePattern-Java代码实例讲解 -
lt26w:
看下面的例子比较明白.
FacadePattern-Java代码实例讲解 -
javaloverkehui:
这也叫文档,别逗我行吗,也就自己看看。
HtmlCleaner API -
SE_XiaoFeng:
至少也应该写个注释吧。
HtmlCleaner API -
jfzshandong:
...
org.springframework.web.filter.CharacterEncodingFilter 配置
(根据
Struts Validator Guide
)
作者:
David Winterfeldt
大卫
James Turner
詹姆斯
Rob Leland
罗伯特
翻译:
侯思超
从
0.5
版,验证器在一些
form
中就已经实现了,他最初包含在开发人员包中,后来核心代码挪到
Jakarta Commons
包中和
Struts
特别扩展中作为
Struts 1.1
的一部分。许多开发者为方便一直使用
struts
验证器,这篇文档首先概述验证器的核心功能性,然后大概介绍在
struts1.1
中的变化和新增功能。
如果你配置好验证器插件,你应该扩展
ValidatorForm
而不是
ActionForm
,以便它能加载你的
Validator
资源。他根据
struts-config.xml
文件中的
action
的
name
属性为当前
form
的调用相应的验证器,因此在
validator-rules.xml
中的
form
元素的名称属性应该与
action
的
name
属性值相匹配。
另外一种选择是扩展
ValidatorActionForm
而不是
ValidatorForm
,
ValidatorActionForm
使用
struts-config.xml
中
action
的
path
属性,所以
path
属性的值相应的应该与
validator-rules.xml
中的
Form
的
name
属性匹配。
一个分离的
action
可以定义给多页
form
的每个页面,而且验证规则可以与
action
关联而不是与页码,就像验证范例中的多页
form
范例那样。
在
validator-rules.xml
文件中
form
的验证规则可以组织为
FormSet
。
FormSet
有与
java.util.Locale
类相应的属性:如语言
,
国家以及变量型属性,如果他们未定义,
FormSet
将把它设置为默认值。一个
FormSet
也可以有关联的常量。另外还可以定义与
FormSet
同一级别的全局
global
元素,他与
FormSet
同样也有常量。
注意
:你必须在国际化的
FormSet
前声明一个没有国际化的默认
FormSet
。这样如果
Validator
没有找到
locale
时可以有一个默认版本。
可插入验证器的默认错误信息值可以被
msg
元素覆盖。所以为
mask
验证器生成错误信息的替代方法就是使用
msg
属性,如果字段的
name
属性与验证器的
name
属性匹配,那末将使用字段的
msg
属性。
error messages
的可以设置
arg0-arg3
等参数元素。如果没有设置
arg0-arg3
的
name
属性,
error messages
将使用他们作为默认的构建参数值。如果设置了
name
属性,你就可以把参数指定给一特定的可插入验证器,然后这些参数将在构造错误信息时被使用。
<field
property="lastName"
depends="required,mask">
<msg
name="mask"
key="registrationForm.lastname.maskmsg"/>
<arg0 key="registrationForm.lastname.displayname"/>
<var>
<var-name>mask</var-name>
<var-value>^[a-zA-Z]*$</var-value>
</var>
</field>
默认的
arg0-arg3
元素将在消息资源中查找相应的
key
,如果资源属性设为
false
,她将把值直接传进去,而不从消息资源中查找。注意
1.1
版本中,你必须为每个模块中明确地定义在验证中用到的消息资源,否则将使用
top-level
资源。
<field
property="integer"
depends="required,integer,intRange">
<arg0 key="typeForm.integer.displayname"/>
<arg1
name="range"
key="${var:min}"
resource="false"/>
<arg2
name="range"
key="${var:max}"
resource="false"/>
<var>
<var-name>min</var-name>
<var-value>10</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>20</var-value>
</var>
</field>
全局的常量可以在全局标签中定义,
FormSet/
本地常量能在
formset
标签中创建。常量当前仅仅是代替字段的
property
属性,字段的
var
元素的
value
属性,字段的
msg
元素的
key
属性,字段的
arg0-arg3
元素的
key
属性。字段的变量也可以在
arg0-arg3
元素中被代替(例如:
${var:min}
))。替换的顺序是
FormSet/Locale
常量第一,全局的常量第二,
arg elements
变量最后。
<global>
<constant>
<constant-name>zip</constant-name>
<constant-value>^\d{5}(-\d{4})?$</constant-value>
</constant>
</global>
<field
property="zip"
depends="required,mask">
<arg0 key="registrationForm.zippostal.displayname"/>
<var>
<var-name>mask</var-name>
<var-value>${zip}</var-value>
</var>
</field>
验证器可以使用字段下面的变量部分来存储变量,这些变量通过字段的
getVar
(
(String key)
方法取得。
<field
property="integer"
depends="required,integer,intRange">
<arg0 key="typeForm.integer.displayname"/>
<arg1
name="range"
key="${var:min}" resource="false"/>
<arg2
name="range"
key="${var:max}" resource="false"/>
<var>
<var-name>min</var-name>
<var-value>10</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>20</var-value>
</var>
</field>
使用
validwhen
来设计复杂验证的一个经常的要求就是根据一个字段验证另外一个字段(比如
,
如果你要用户两次输入口令来确认值口令一致),另外一个就是表单中的一个字段只有另外一个字段有确定值的时候才是必须输入的。新的
validwhen
验证规则将很快被包含在
1.1
后的
STRUTS
版本中,她就是用来处理这种情况的。
validwhen
规则处理单个的变量字段,叫测试。这变量的值是一个布尔的表达式,如果验证有效则它必须为真。可以包含这种变量的表达式有:
u
单引号或双引号字符串
literals
,
u
十进制、十六进制、八进制的
Integer literals
,
u
null
与
null
和空字符串匹配,
u
其它可以用属性名引用的
form
字段
,
例如
customerAge
,
u
可以在外部因用得索引字段
,
例如
childLastName[2]
,
u
可以默认
implicit
因用得索引字段
,
例如
childLastName[],
她将作为被索引的字段使用同样的索引到数组中,
The literal *
这里指它包含当前测试字段的值,
作为例子,考虑一个包含通讯地址和邮箱字段的
form
。如果通讯地址不为空则邮箱字段是必须的
required
。你能这样定义
validwhen
规则:
<field property="emailAddress" depends="validwhen">
<arg0 key="userinfo.emailAddress.label"/>
<var>
<var-name>test</var-name>
<var-value>((sendNewsletter == null) or (*this* != null))</var-value>
</var>
</field>
上面定义的意思是:如果通讯地址是空或不空时这个字段时有效的。
这里有个稍微复杂的例子,它使用了索引字段。假定有一个表单,允许用户输入他们希望定购的部件号和数量。类
orderLine
的
bean
的一数组被用来在称为
orderLines
的一属性保持输入项。
If you wished to verify that every line with part number also had a quantity entered, you could do it with:
如果你希望校验订单中有数量输入得每一行,你可以这样:
<field
property="quantity"
indexedListProperty="orderLines"
depends="validwhen">
<arg0 key="orderform.quantity.label"/>
<var>
<var-name>test</var-name>
<var-value>((orderLines[].partNumber == null) or (*this* != null))</var-value>
</var>
</field>
这里的意思是:如果相应的
partNumber
字段是空
,
或这字段是不空的,则这字段是有效的。
最后一个例子,想象一表单,用户必须输入他们的以英寸为单位的高度,如果他们在高度在
60
英寸以下,则出一错误。(
it is an error to have checked off nbaPointGuard as a career.
)
<field property="nbaPointGuard" depends="validwhen">
<arg0 key="careers.nbaPointGuard.label"/>
<var>
<var-name>test</var-name>
<var-value>((heightInInches >= 60) or (*this* == null))</var-value>
</var>
</field>
给程序员的简单说明:
所有的比较关系必须在
parens
封装。
All comparisons must be enclosed in parens.
只有两个
itme
时可以
and
或
or
链接。
如果比较的两
item
都可以转为整数,则使用
numeric
比较,否则使用字符串比较。
验证是从
validation.xml
文件中加载的,默认的验证规则定义在
validation.xml
文件中,默认定义了
required, mask ,byte, short, int, long, float, double, date (
没有本地支持
), and a numeric range
。
" mask "
方式依赖于默认值安装要求,那意味着
"required "
可以完成,在
"'mask "
将运行以前
"required "
和
" mask "
方式被默认包含进框架中了。任何字段如果不是
"required "
而且是空或有零长度将跳过其他验证。
如果使用了
Javascript
标签,客户端
javascript
在
validator's javascript
属性中查找值而且产生一个有验证
form
方法的对象,要得到更多的关于
Javascript Validator
标签工作细节的详细的解释
,
参阅
html
标签
API
参考。
"'mask' "
方式让你用一正则表达式掩码验证字段,它使用
jakarta
的正规表达式包,所有的有效性规则存储在
validator-rules.xml
文件,使用的主类是
org.apache.regexp.RE
。
validation.xml
文件中的验证器配置范例:
<validator name="required"
classname="org.apache.struts.validator.FieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="errors.required">
<validator name="mask"
classname="org.apache.struts.validator.FieldChecks"
method="validateMask"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="errors.invalid">
方法的参数是用逗号分隔的一些类名称列表,方法属性需要有一个符合上面的列表的签名。列表由以下组合而成:
java.lang.Object –
要验证的
Bean
。
org.apache.commons.validator.ValidatorAction –
当前
ValidatorAction
。
org.apache.commons.validator.Field –
要验证的字段
org.apache.struts.action.ActionErrors –
如果验证错误将加入
ActionError
的错误对象
javax.servlet.http.HttpServletRequest –
当前
request
对象。
javax.servlet.ServletContext –
应用的
ServletContext
。
org.apache.commons.validator.Validator–
当前的
org.apache.commons.validator.Validator
实例。
java.util.Locale –
当前用户的
Locale
。
字段部分有一可选的页面属性,它可以被设为整数,页上字段的所有验证小于或等于服务器端验证的当前页,页上字段的所有验证小于或等于客户端页上所有字段的验证小于或等于服务器端验证的当前页验证的当前页。一个
mutli-part
表单需要定义页面属性:
<html:hidden property="page" value="1"/>
。
这是一个展示你怎样才能比较两个字段是否有一样的值的例子。比如“用户改变他们的口令“一般会有口令字段和一确认字段。
<validator name="twofields"
classname="com.mysite.StrutsValidator"
method="validateTwoFields"
msg="errors.twofields"/>
<field property="password" depends="required,twofields">
<arg0 key="typeForm.password.displayname"/>
<var>
<var-name>secondProperty</var-name>
<var-value>password2</var-value>
</var>
</field>
public static boolean validateTwoFields(
Object bean, ValidatorAction va,
Field field, ActionErrors errors, HttpServletRequest request,
ServletContext application) {
String value = ValidatorUtils.getValueAsString( bean,
field.getProperty());
String sProperty2 = field.getVarValue("secondProperty");
String value2 = ValidatorUtils.getValueAsString( bean,
sProperty2);
if (!GenericValidator.isBlankOrNull(value)) {
try {
if (!value.equals(value2)) {
errors.add(field.getKey(),
Resources.getActionError( application, request, va, field));
return false;
}
} catch (Exception e) {
errors.add(field.getKey(), Resources.getActionError( application, request, va, field));
return false;
}
}
}
Struts Validator
依赖于
Commons Validator
包,所以问题报告和增强需求可能在两个产品中列出。
·
Struts Validator Bugzilla Reports
·
Commons Validator Bugzilla Reports
新建的标记属性。
<html:javascript>
标记有新的属性定义
.
使用
commons-validator.jar
中的
DTD
验证。
当前使用的验证
XML
文件是根据
commons-validator.jar
中的
DTD
。
Struts
不在为
validator-rules.xml and validator.xml.
单独维护一个分离的
DTD
,另外
,commons-validator
现在维护一个统一的
validator.dtd
。修改所有
validator.xml
文件的
DTD
引用为
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
空字段。
当前默认在所有得基础验证类型中忽略空白的字段,如果你要求一个字段必须输入,那末在你的应用的
validator.xml
文件相应的字段定义的
depends
属性中添加
" required "
。
新建的范围
RANGE
方法
.
JavaScript
和
JAVA
中都添加了
intRange & floatRange
方法。
有条件地
REQUIRED
字段
.
最大的修改是添加了基于其她字段的值的有条件地
require
验证的能力。它允许你定义逻辑如:“只有
X
字段非空的时候
Y
字段为
’male’
才有效”,这是实现上述逻辑的推荐方法,这种方法在
1.1
版后的第一版将实现。在
1.1
版中添加的
Requiredif
验证规则,将在新版中去掉。不过,如果你正准备使用
requiredif
,这里有一个简短的教程。
让我们假定你有一个有
3
个字段的医药的信息表单,性别
sex
,怀孕测试
pregnancyTest
,测试结果
testResult
,如果性别为
'f' or 'F'
,则怀孕测试
pregnancyTest
是
required
,如果
pregnancyTest
不是空,测试结果
testResult
是
required
。
你的
validation.xml
文件的输入项应该是这样的:
<form name="medicalStatusForm">
<field property="pregnancyTest" depends="requiredif">
<arg0 key="medicalStatusForm.pregnancyTest.label"/>
<var>
<var-name>field[0]</var-name>
<var-value>sex</var-value>
</var>
<var>
<var-name>fieldTest[0]</var-name>
<var-value>EQUAL</var-value>
</var>
<var>
<var-name>fieldValue[0]</var-name>
<var-value>F</var-value>
</var>
<var>
<var-name>field[1]</var-name>
<var-value>sex</var-value>
</var>
<var>
<var-name>fieldTest[1]</var-name>
<var-value>EQUAL</var-value>
</var>
<var>
<var-name>fieldValue[1]</var-name>
<var-value>f</var-value>
</var>
<var>
<var-name>fieldJoin</var-name>
<var-value>OR</var-value>
</var>
</field>
<field property="testResult" depends="requiredif">
<arg0 key="medicalStatusForm.testResult.label"/>
<var>
<var-name>field[0]</var-name>
<var-value>pregnancyTest</var-value>
</var>
<var>
<var-name>fieldTest[0]</var-name>
<var-value>NOTNULL</var-value>
</var>
</field>
</form>
这里有一个使用索引的属性更复杂的例子,如果你的
struts-config.xml
有这下面:
<form-bean name="dependentlistForm"
type="org.apache.struts.webapp.validator.forms.ValidatorForm">
<form-property
name="dependents"
type="org.apache.struts.webapp.validator.Dependent[]" size="10"/>
<form-property name="insureDependents" type="java.lang.Boolean" initial="false"/>
</form-bean>
这里
dependentlistForm bean
有
lastName
,
firstName
,
dob
,
coverageType
四个属性,你可以这样定义一验证规则:
<form name="dependentlistForm">
<field
property="firstName" indexedListProperty="dependents" depends="requiredif">
<arg0 key="dependentlistForm.firstName.label"/>
<var>
<var-name>field[0]</var-name>
<var-value>lastName</var-value>
</var>
<var>
<var-name>fieldIndexed[0]</var-name>
<var-value>true</var-value>
</var>
<var>
<var-name>fieldTest[0]</var-name>
<var-value>NOTNULL</var-value>
</var>
</field>
<field
property="dob" indexedListProperty="dependents" depends="requiredif,date">
<arg0 key="dependentlistForm.dob.label"/>
<var>
<var-name>field[0]</var-name>
<var-value>lastName</var-value>
</var>
<var>
<var-name>fieldIndexed[0]</var-name>
<var-value>true</var-value>
</var>
<var>
<var-name>fieldTest[0]</var-name>
<var-value>NOTNULL</var-value>
</var>
</field>
<field
property="coverageType" indexedListProperty="dependents" depends="requiredif">
<arg0 key="dependentlistForm.coverageType.label"/>
<var>
<var-name>field[0]</var-name>
<var-value>lastName</var-value>
</var>
<var>
<var-name>fieldIndexed[0]</var-name>
<var-value>true</var-value>
</var>
<var>
<var-name>fieldTest[0]</var-name>
<var-value>NOTNULL</var-value>
</var>
<var>
<var-name>field[1]</var-name>
<var-value>insureDependents</var-value>
</var>
<var>
<var-name>fieldTest[1]</var-name>
<var-value>EQUAL</var-value>
</var>
<var>
<var-name>fieldValue[1]</var-name>
<var-value>true</var-value>
</var>
<var>
<var-name>fieldJoin</var-name>
<var-value>AND</var-value>
</var>
</field>
</form>
这里的意思是:
如果
lastName
字段是
Struts Validator
验证器使用指南
验证器:
国际化
常量
/
变量
使用
validwhen
设计复杂的验证
可插入验证器
定义可插入验证器
多页面
form
比较两个字段
已知的
bug
变更和
deprecations
发表评论
-
fckedit和struts2集成不能上传文件的解决方法
2010-01-24 10:52 1613以前在使用fckedit+strut1上传文件很顺利,后来使用 ... -
struts validator框架
2010-01-09 13:56 1425Struts 验证器基础 步骤 1. 安装 Strut ... -
The path of an ForwardConfig cannot be null-struts validator验证框架异常
2010-01-09 13:54 3044struts validator验证框架异常 在测 ... -
关于一个Action对应多个Form
2009-12-28 23:49 1503由于一个Action可以用多个path来访问,所以我们可以通过 ... -
一个Action对应多个Form DispatchAction
2009-12-28 23:32 2703一个Action对应多个Form ... -
DynaValidatorForm类
2009-12-28 23:23 1283DynaValidatorForm类 http ... -
Struts出现No getter method for property的解决
2009-12-28 22:48 2005请从一下几方面着手检查代码 1、JavaBean中的属性 ... -
Form '***' not found for locale 'zh _CN'
2009-12-07 16:13 4358Form '***' not found for locale ... -
Struts2 拦截器详细配置过程
2009-12-06 21:23 18181:所有拦截器的超级接口Interceptor ,Ac ... -
如何在SSH框架中使用Validator框架
2009-12-05 00:19 1329关键字: validator 下 ... -
java.lang.NoSuchMethodException
2009-12-04 23:56 2045关键字: validator 下面将介绍如何在SSH框架 ... -
Struts验证框架与一些技巧
2009-12-04 23:46 16171还是通过一些步骤例子说明 首先建立Struts工程的时候要 ... -
Struts-validator验证框架与一些技巧
2009-12-04 23:44 1156这个框架褒贬不一呀~~~ =========== ... -
struts 标签详解
2009-12-04 21:28 1032struts 标签详解 Action和jsp的开发其实就 ... -
HTTP Status 404 - Servlet action is not available(二)
2009-12-04 18:41 5870今天在帮公司的新手弄SSH的一个登录程序时,出现了Servle ... -
HTTP Status 404 - Servlet action is not available(一)
2009-12-04 18:40 7828sp /meCall 发表于2007-10-08, 1 ... -
SSH中Cannot retrieve mapping for action
2009-12-04 18:22 2179<script type="text ... -
Cannot retrieve mapping for action 之 问题解决
2009-12-04 18:21 11333struts的form标 ... -
利用Struts的Validator验证框架实现客户端和服务器端双验证
2009-12-04 18:18 1538... -
struts的parameter功能
2009-12-04 17:32 1069没有struts之前,使用servlet,最常用的是d ...
相关推荐
Struts Validator是一个强大的工具,用于在Struts框架中执行客户端和服务器端的数据验证。这个验证器自Struts 1.1版本开始成为其核心组成部分,极大地增强了应用的健壮性和用户体验。以下是对Struts Validator使用的...
通过配置 `struts-config.xml` 和 `validation.xml` 文件,以及利用 `Validator-rules.xml` 中的预定义验证器,开发者可以确保用户提交的数据符合预期格式和规则,从而降低程序出错的可能性并提高应用的质量。
Validator验证在Struts应用程序中扮演着至关重要的角色,它能够确保用户输入的数据符合预设的规则,从而提高应用的健壮性和用户体验。在这个实例和文档中,我们将深入探讨Struts Validator的工作原理、配置以及如何...
另一个文件"Struts2QuickValidation.pdf"很可能是一个用户指南或文档,详细介绍了如何使用Struts2 Plus进行数据验证,包括如何配置插件、定义验证规则、处理验证错误以及如何在视图层展示验证结果等。这个文档对于...
- **`struts2struts1validator`** 模块:这部分源码可能展示了如何在Struts2中使用Struts1的Validator框架进行数据验证。Struts2提供了内置的验证框架,但也可以与Struts1的Validator规则文件和验证类集成,以利用...
同时,Struts 2内置了验证框架,类似于Struts 1的Validator,但更加强大和易于使用。开发者可以通过注解或XML配置文件定义验证规则,并能轻松地处理错误信息。 **validator-strut2-11.pdf**: 这份文档很可能是关于...
本快速学习指南将帮助初学者深入理解Struts框架的核心概念、架构和使用方法,从而快速上手开发Java Web应用。 首先,我们来了解Struts的基本架构。Struts通过分离业务逻辑、视图展示和控制流程,实现了应用的模块化...
Struts2支持许多第三方验证框架,如Hibernate Validator和Apache Commons Validator。这些框架提供了丰富的验证注解和API,可以方便地在Action类或模型对象上定义验证规则。这种方式提高了验证的灵活性和扩展性,...
3. **文档**:可能包含`docs`目录,其中包含API文档、用户指南和开发者文档,帮助用户快速上手并了解如何使用验证器。 4. **配置文件**:如`conf`目录下的`validation.xml`,这是Validator的核心配置文件,用于定义...
3. **Struts2验证框架** (18.4\struts2struts1validator) 验证是确保用户输入有效性和安全性的关键部分。这里你将了解到Struts2的验证框架,包括自定义验证逻辑、配置文件中的验证规则、以及如何在Action中应用验证...
Struts的Validator框架允许开发者定义表单验证规则,自动检查用户输入的有效性,减少业务逻辑中的错误。 七、Struts 2的发展 随着技术的发展,Struts 1逐渐被Struts 2所取代。Struts 2融合了更多框架的优点,如...
- Struts2的拦截器是其核心特性之一,它们按照预定义的顺序在Action调用前后执行,用于实现通用的功能,如日志记录、权限验证、数据转换等。 - 拦截器链可以自定义,通过配置文件或编程方式添加或删除拦截器。 3....
- 集成了各种验证框架,如Commons Validator,方便表单验证。 - 可扩展性强,可通过插件扩展功能。 **5. Struts的局限性与升级** 尽管Struts1在早期Web开发中广泛使用,但随着时间的推移,其性能和安全问题逐渐暴露...
5. **模型绑定与数据校验**:探讨了Struts2中的模型驱动和数据校验机制,包括使用OGNL表达式进行属性绑定,以及利用Validator插件进行表单验证。 6. **国际化与本地化**:阐述了如何在Struts2中实现多语言支持,...
同时,Struts2的Validator框架允许开发者定义表单验证规则,确保输入数据的有效性。 9. **Ajax支持**:通过Struts2的AJAX插件,可以轻松实现部分页面的异步更新,提升用户体验。 10. **插件架构**:Struts2拥有...