完成的项目文件:直接下载
。下面先简要说明一下创建过程:
1、先在MyEclipse中创建一个Web项目,项目名字为Struts20。如果你用的是Eclipse,则创建的是“Dynamic Web Project”。
2、从Struts官方网站下载struts-2.0.14-all.zip,解压缩,从中拷贝以下五个文件到项目的WEB-INF/lib目录下面:
3、修改web.xml文件,在其中添加一个过滤器:
<filter>
<filter-name>Struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4、新建一个reg.jsp页面,并在其中添加一个表单(使用了Struts2的标签库):
<s:form action="register" namespace="/"
method="post">
<s:textfield name="name" key="name" size="20" />
<s:textfield name="age" key="age" size="20" />
<s:textfield name="telephone" key="telephone" size="20" />
<s:submit key="label.register.submit" align="center" />
</s:form>
5、新建一个success.jsp页面:
<h2>Registered: <s:property value="name" /> !</h2>
6、在项目的src目录下面创建两个文件:ApplicationResources.properties 和 struts.xml
ApplicationResources.properties文件内容为:
name= Name
age= Age
telephone= Telephone
label.register.submit= Submit
errors.required=${getText(fieldName)} is required.
errors.range=${getText(fieldName)} is not in the range ${min} and ${max}.
struts.xml文件内容为(部分):
<struts>
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
<package name="default" extends="struts-default" namespace="/">
<action name="register" class="test.RegisterAction">
<result name="success">success.jsp</result>
<result name="input">reg.jsp</result>
</action>
</package>
</struts>
7、创建一个RegisterAction的类,源代码如下:
package test;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport{
private String name;
private Integer age;
private String telephone;
public String execute() {
return SUCCESS;
}
... // getter和setter方法
}
现在可以运行一下,首页指向reg.jsp,应该能够成功提交。
但是,如果表单中不写 namespace="/"
的话,你会看到下面的警告:
No configuration found for the specified action: 'register' in namespace: ''. Form action defaulting to 'action' attribute's literal value.
这是因为我们在struts.xml中定义的Action指定了namespace,因此使用时如果不在表单中指定namespace的话,Struts2会到""这一默认的namespace中去找。
注意到,我们前面在web.xml中添加过滤器的时候,使用的是“/*”,但在有些地方我们也会看到使用“*.action”的情形,那么这两者之间有什么区别呢?
试着修改一下web.xml文件,将“/*”替换成“*.action”,然后再次运行,浏览reg.jsp页面,我们会看到下面的异常信息:
The Struts dispatcher cannot be found
. This is usually caused by using Struts tags without the associated filter
. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]
原因解释:如果在jsp页面中用到了Struts2的标签库,必须让该jsp页面经过Struts2过滤器处理一下。因为我们提交的是reg.jsp,只有*.action的链接才会由Struts2来处理。
有些文章提到在这种情况下(即url映射方式为*.action),可以使用另一种方法强制让Struts2过滤器处理jsp页面。我们可以修改struts.xml文件:
<package name="default" extends="struts-default" namespace="/">
<action name="register" class=...> ... </action>
<action name="*">
<result>{1}.jsp</result>
</action>
</package>
这是一个通用的Action配置,此时提交形如“reg
.action”的链接时,Struts2最后会转到reg
.jsp页面中去。
再试着运行一下,在浏览器中输入: http://..../Struts20/reg.action,看看会不会出现正常的页面。不过,如果提交的链接是http://..../Struts20/reg的话,就会出现HTTP404的错误(我做试验得到的是这种结果),原因是我们已经在web.xml中配置url映射方式是“*.action”。
为了不找麻烦的话,干脆在web.xml中就直接配置映射方式为“/*”就一劳永逸了。
接下来我们再来看看Struts2中的验证框架的使用。在Struts2中有多种验证方式,可以是传统的手工Javascript验证,也可以直接使用Struts2的验证框架。要启用验证框架的步骤很简单,我们需要在RegisterAction类的相同位置新建一个配套的RegisterAction-validation.xml文件,其主要内容为:
<validators>
<field name="name
">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key="errors.required" />
</field-validator>
</field>
<field name="age
">
<field-validator type="required">
<message key="errors.required" />
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">100</param>
<message key="errors.range"/>
</field-validator>
</field>
<field name="telephone"
>
<field-validator type="requiredstring">
<message key="errors.required" />
</field-validator>
</field>
</validators>
这里的蓝色部分必须与页面中的命名完全一致(实际上和RegisterAction类的几个成员变量名字也是一致的)。其中对用户name的验证规则是:必填(忽略前后的空格);对用户age的验证规则是:必填、整数、大小介于1-100之间;对用户telephone的验证规则是:必填。
配置好了验证的xml文件后,还需要在jsp页面中启用验证:
<s:form action="register" namespace="/" method="post" validate="true"
>
...
</s:form>
运行一下,是不是得到下面失望的结果:
FreeMarker template error!
Method public java.lang.String com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMessage(java.lang.Object) threw an exception when invoked on com.opensymphony.xwork2.validator.validators.RequiredStringValidator@f62eba
The problematic instruction:
----------
==> ${validator.getMessage(action)?js_string} [on line 50, column 26 in template/xhtml/form-close-validate.ftl]
in include "/${parameters.templateDir}/xhtml/form-close-validate.ftl" [on line 25, column 1 in template/xhtml/form-close.ftl]
----------
Java backtrace for programmers:
...
这是什么原因呢?
接下来我们再来试验,修改reg.jsp页面:
<s:form action="register.action
" namespace="/" method="post" validate="true"
>
...
</s:form>
即在表单的action属性中附加“.action”后缀。再次运行,我们的确看到了reg.jsp页面的结果,但MyEclipse的控制台又出现了下面的信息:
2010-7-22 12:53:34 org.apache.struts2.components.Form evaluateExtraParamsServletRequest
警告: No configuration found for the specified action: 'register.action' in namespace: '/'. Form action defaulting to 'action' attribute's literal value.
意思是我们在struts.xml文件中没有定义名为“register.action
”的Action配置。查阅Struts2的标签库文档可知,s:form标签的action属性的确不需要再附加“.action”后缀:
action |
Set action name to submit to, without .action suffix
|
那为什么我们按照要求不加.action后缀会引发异常呢,问题的症结在哪里?
原来啊,我们使用的验证框架里用到了资源文件,此时就要求必须先进入action,然后再转入jsp才行。至于在s:form中添加.action后缀可以使得reg.jsp能够正常显示的原因(虽然出现了
No configuration found for the specified action
的警告
),我没能找到答案
。
最后的解决办法:
(1)struts.xml中配置通用Action
<package name="default" extends="struts-default" namespace="/">
<action name="register" class=...> ... </action>
<action name="*">
<result>{1}.jsp</result>
</action>
</package>
(2)web.xml配置过滤器
<filter>
<filter-name>Struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(3)对于需要用到资源文件的jsp页面,且该页面又要用到验证框架,我们采用
http://..../Struts20/reg.action
的方式来转向我们真正关心的reg.jsp
页面。
另外,如果你仍然希望在链接中使用“reg.jsp”来得到正常的页面的话,可在struts.xml中重新配置如下:
<struts>
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
<constant name="struts.action.extension" value="action,jsp" />
<package name="default" extends="struts-default" namespace="/">
<action name="register" class="test.RegisterAction">
<result name="success">success.jsp</result>
<result name="input">reg.jsp</result>
</action>
<action name="*">
<result>{1}.jsp</result>
</action>
</package>
</struts>
上面的配置是把后缀“.jsp”也纳入与“.action”同等对待,即寻找对应Action进行处理。
现在可以在浏览器地址栏中输入 http://..../Struts20/reg.jsp
看看结果是否正常。
- 大小: 3.3 KB
分享到:
相关推荐
在Struts2中,Validation框架是用于处理数据验证的重要组件,它允许开发者在用户输入提交到服务器之前或之后进行验证,确保数据的准确性和完整性。下面将详细解释Struts2中的Validation框架及其在前后台验证中的应用...
本篇文章将详细探讨Struts2如何使用Validation框架进行数据验证。 一、Struts2 Validation框架概述 Struts2的Validation框架是用于处理用户输入验证的一种机制。它允许开发者定义验证规则,这些规则会在用户提交...
在使用Struts Validation框架之前,需要在`struts-config.xml`文件中配置Validator插件。例如: ```xml <plug-in className="org.apache.struts.validator.ValidatorPlugin"> ,/WEB-INF/validation.xml"/> ``` ...
从http://wiki.javascud.org/display/ww2cndoc/Valida<br>tion 网站上收集的一些关于有关Struts2验证框架的资料,并将其做成电子书以方便查看,另外向朋友们推荐一个很好的学习Struts2的博客...相信对正在学习Struts2的...
2. 可扩展性:Struts2 验证框架提供了高度的可扩展性,可以根据不同的业务逻辑添加新的Validators和Validation Rules,以满足新的验证需求。 3. 高效性:Struts2 验证框架提供了高效的验证机制,可以快速地对用户...
Struts2 Validation是Apache Struts框架的一个重要组成部分,主要用于处理Web应用中的数据验证。这个框架提供了灵活且强大的机制,帮助开发者实现对用户输入的有效性检查,确保数据的准确性和安全性。下面将详细介绍...
- Struts 2中,Validation框架被更强大的Struts 2拦截器机制取代,提供了更灵活的验证方式和更丰富的功能。 深入研究Struts的Validation框架源码可以帮助开发者理解其内部工作原理,以便更好地自定义验证规则、...
在Struts中,Validation框架是用于处理用户输入验证的重要组件,它可以确保用户提交的数据符合预定义的规则,从而提高应用程序的安全性和用户体验。 在创建一个注册模块时,通常需要对用户的输入数据进行严格的验证...
### Struts1.2中的Validation验证框架实现步骤详解 #### 一、环境配置与准备工作 在Struts1.2框架中实现验证功能首先需要完成环境配置。这包括添加必要的库文件(JAR包)、配置XML文件等。 ##### 1.1 添加...
本实例将带你深入理解Struts2验证框架的使用,以及在实际操作中可能遇到的问题和解决方案。 首先,Struts2的验证框架主要基于两个组件:`Validation`和`Validator`。`Validation`是Action类的注解,而`Validator`则...
Struts2框架是Java Web开发中的一个流行框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了一种结构化和可扩展的方式来构建应用程序。此压缩包文件包含的是Struts2的源码,特别适合初学者研究和学习...
Struts2作为一款流行的Java ...总之,Struts2的校验框架为Java Web开发提供了强大的数据验证机制,帮助开发者确保数据质量,减少因输入错误导致的问题。理解并熟练运用这一框架,对于提升项目质量和用户体验至关重要。
Struts2是一个强大的MVC(Model-View-Controller)框架,它是Apache软件基金会下的一个开源项目,被广泛应用于Java EE应用程序开发中。Struts2框架是Struts1的升级版本,它结合了WebWork框架的优点,提供了更高效、...
在提供的“struts2验证框架例子”中,你可能会看到类似的代码结构和配置,通过实践这些示例,你可以更好地理解如何在实际项目中应用Struts2的验证框架。同时,它也将帮助你学习如何处理常见的验证场景,如非空检查、...
Struts2框架详解 Struts2是Java Web开发中的一款广泛应用的开源MVC框架,它构建在...然而,随着Spring Boot和其他轻量级框架的崛起,Struts2在现代Web开发中的使用有所减少,但在一些大型企业项目中仍占据一席之地。
**标题** "Validation_Struts2" 指的是Struts2框架中的表单验证机制。这通常涉及到在用户提交表单时,对输入数据进行校验,以防止无效或不合法的数据进入系统。 **描述** "Struts2 form Validation" 提到了Struts2...
通过以上介绍,我们可以看到,在Struts2框架中使用`validation.xml`进行验证配置非常灵活。无论是针对特定Action还是整个应用,都可以轻松地定义和管理验证规则。这种机制不仅简化了代码结构,也提高了程序的可维护...