this.username = username; }
//password属性对应的getter方法 public String getPassword() {
return password; }
//password属性对应的setter方法 public void setPassword(String password) {
this.password = password; }
//处理用户请求的execute方法
public String execute() throws Exception {
//当用户请求参数的username等于scott,密码请求参数为tiger时,返回success 字符串
//否则返回error的字符串 if (getUsername().equals(\&& getPassword().equals(\) {
return \} else {
return \} }
//完成输入校验需要重写的validate方法 public void validate() {
//如果用户名为空,或者用户名为空字符串
if (getUsername() == null || getUsername().trim().equals(\{
//添加表单校验错误
addFieldError(\\}
//当密码为空,或者密码为空字符串时,添加表单校验错误 if (getPassword() == null || getPassword().trim().equals(\{ addFieldError(\\} } } 上面的Action类重写了validate方法,该方法会在执行系统的execute方法之前执行,如果执行该方法之后,Action类的fieldErrors中已经包含了数据校验错误,请求将被转发到input逻辑视图处。 为了在校验失败后,系统能将视图转入input处,必须在配置该Action时配置input属性。下面是修改后login Action的配置片段:
提示 Struts 2的
实际上,ActionSupport类已经提供了国际化信息的能力,它提供了一个getText(String key)方法,该方法用于从资源文件中获取国际化信息。为了让校验信息支持国际化,再次改写Action里的validate方法,改写后的validate方法代码如下:
//执行数据校验的validate方法 public void validate() {
//如果用户名为空,或者为空字符串
if (getUsername() == null || getUsername().trim().equals(\{
//添加校验错误提示,使用getText方法来使提示信息国际化 addFieldError(\getText(\}
if (getPassword() == null || getPassword().trim().equals(\{
addFieldError(\getText(\} }
在上面的validate方法中,添加校验错误提示时,并不是直接给出了错误提示的字符串,而是调用了getText方法来获取错误提示。因为在Action中,
使用getText方法来获取了两个国际化提示:user.required和pass.required,因此应该在国际化资源文件中添加这两条提示信息。
提示 ActionSupport增加了让提示信息国际化的能力,ActionSupport提供的getText方法可以根据资源文件加载获得国际化提示信息。 此时,如果没有任何输出,直接提交登录表单,将看到如图2.14所示的界面。 图2.14 国际化数据校验的错误提示 2.8.2 使用Struts 2的校验框架 上面的输入校验是通过重写ActionSupport类的validate方法实现的,这种方法虽然不错,但需要大量重写的validate方法——毕竟,重复书写相同的代码不是一件吸引人的事情。 类似于Struts 1,Struts 2也允许通过定义配置文件来完成数据校验。Struts 2的校验框架实际上是基于XWork的validator框架。 下面还是使用原来的Action类(即不重写validate方法),却增加一个校验配置文件,校验配置文件通过使用Struts 2已有的校验器,完成对表单域的校验。Struts 2提供了大量的数据校验器,包括表单域校验器和非表单域校验器两种。 本应用主要使用了requiredstring校验器,该校验器是一个必填校验器——指定某个表单域必须输入。 下面是校验规则的定义文件:
\
定义完该校验规则文件后,该文件的命名应该遵守如下规则:
ActionName-validation.xml:其中ActionName就是需要校验的Action的类名。
因此上面的校验规则文件应该命名为“LoginAction-validation.xml”,且该文件应该与Action类的class文件位于同一个路径下。因此,将上面的校验规则文件放在WEB-INF/classes/lee路径下即可。
当然,在struts.xml文件的Action定义中,一样需要定义input的逻辑视图名,将input逻辑视图映射到login.jsp页面。
如果不输入用户名、密码而提交表单,将再次看到如图2.14所示的界面。在这种校验方式下,无需书写校验代码,只需要通过配置文件指定校验规则即可,因此提供了更好的可维护性。
2.9 本章小结
本章以一个HelloWorld应用为例,简要介绍了Struts 2 MVC框架的基本流程,从Action类基本流程控制讲起,详细介绍了如何开发一个Struts 2应用。本章的后面部分在基本Struts 2应用基础上,介绍了一些Struts 2的深入应用,包括在Action中访问HttpSession状态,将Action处理结果传回JSP页面显示,本应用也综合应用了Struts 2的标签库、数据校验、程序国际化等常用功能。通过阅读本章的内容,读者应该对Struts 2框架有一个大致的掌握。