struts2继承ActionSupport类
1.struts2框架搭建流程,请看上一个博客。
2.在src目录下新建一个包,即com.hnpi.action,在包下建一个class类,即HelloWordAction,
注意:使用继承ActionSupport类来实现Action的方式,如下所示:

import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {  //省略了
}

ActionSupport类本身实现了Action接口,所以继承ActionSupport类就相当于实现了Action接口。除此之外,ActionSupport类还实现了其它几个接口,来为程序员提供更多使用的功能,这些接口和Struts2的一些其他特性相结合,可以实现基本的数据验证功能和国际化。接口如下所示:

com.opensymphony.xwork2.Validateable;  //提供validate()方法来为Action增加验证的功能
com.opensymphony.xwork2.Validateaware; //提供方法来保存和恢复action或field级的错误信息
com.opensymphony.xwork2.TextProvider;  //提供获取本地信息文本的功能
com.opensymphony.xwork2.LocaleProvider;//提供getLocale()方法来获取本地消息

3.要实现数据验证的功能,只需要在Action类中覆盖实现validate方法即可;在validate方法内部,对请求传递过来的数据进行校验,如果不满足要求,那么添加例外信息到父类用于存放例外的集合中。示例代码如下:

package com.hnpi.action;import com.opensymphony.xwork2.ActionSupport;public class HelloWorldAction extends ActionSupport {private String account;  private String password;  private String submitFlag;  public String execute() throws Exception {  this.businessExecute();  return "toWelcome";  }  public void validate(){  if(account==null || account.trim().length()==0){  this.addFieldError("account", "账号不可以为空");  }  if(password==null || password.trim().length()==0){  this.addFieldError("password", "密码不可以为空");  }if(password!=null && !"".equals(password.trim()) && password.trim().length()<6){  this.addFieldError("password", "密码长度至少为6位");  }  }  /** * 示例方法,表示可以执行业务逻辑处理的方法, */  public void businessExecute(){  System.out.println("用户输入的参数为==="+"account="+account+",password="+password+",submitFlag="+submitFlag);  }public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSubmitFlag() {return submitFlag;}public void setSubmitFlag(String submitFlag) {this.submitFlag = submitFlag;}  }

从上面的示例可以看出,在validate方法中,可以对用户请求中传递过来的数据进行验证,同一个数据可以进行多方面的验证。

如果验证结果是数据不正确,那么就使用父类提供的addFieldError方法来添加验证的错误消息。addFieldError方法有两个参数,前面的是消息的key值,后面是具体的消息。
4.新建视图层 jsp页面
1>login.jsp登录页面

<%@ page language="java" contentType="text/html; charset=utf-8"  pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; utf-8">
<title>登录页面</title>
<style type="text/css">
ul,li {list-style-type:none;margin:0px;float:left;
}
</style>
</head>
<body>  <form action="helloworld" method="post"> <input type="hidden" name="submitFlag" value="login"/>  <div> <font color=red><s:fielderror fieldName="account"/></font><br/>账号:<input type="text" name="account"></div><div><font color=red><s:fielderror fieldName="password"/></font><br/>密码:<input type="password" name="password"></div><input type="submit" value="提交">
</form>  </body>
</html>

2>登陆成功页面

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>录入页面</title></head> <body>登陆成功 <br></body>
</html>

3>在JSP页面中利用<s:fielderror/>标签在相应的字段处输出错误信息。但是,在实际开发中,<s:fielderror/>它会输出全部的错误信息内容。而如果想选择性地输出指定错误信息。我们可以使用如下代码解决:

<!-- 方法一 -->
<s:fielderror>  <s:param>username</s:param> <!--显示指定的 username字段的 错误消息-->
<s:fielderror/><!-- 方法二 -->
<s:fielderror fieldName="username"/> <!--显示指定的 username字段的 错误消息-->

5.validate方法是没有返回值的,那么当验证后,如果有数据没有通过验证,该返回到什么页面呢?这就需要在struts.xml中的Action配置里面,添加一个名称为input的result配置,也就是说,如果validate方法中,有数据没有通过验证,那么会自动跳转回到该action中名称为input的result所配置的页面。示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd">
<struts><package name="default" extends="struts-default"><action name="register" class="com.hnpi.action.RegisterAction" method="t1"><result name="success">/index.jsp</result></action><action name="helloworld" class="com.hnpi.action.HelloWorldAction">  <result name="toWelcome">/welcome.jsp</result> <result name="input">/login.jsp</result>   </action>  </package>
</struts>

6.建立消息的配置文件,在Action类的路径下建立一个同名的properties文件,也就是文件名为HelloWorldAction.properties,即右击包名,新建others,找到general,点击File,建properties文件。


然后在里面按照key=value的格式,添加要使用的错误消息。示例如下:

k1=\u5E10\u53F7\u4E0D\u5141\u8BB8\u4E3A\u7A7A
k2=\u5BC6\u7801\u4E0D\u5141\u8BB8\u4E3A\u7A7A
k3=\u5BC6\u7801\u957F\u5EA6\u5FC5\u987B\u57286\u4F4D\u4EE5\u4E0A

其实是把中文的消息转换成了相应的unicode编码,比如k1后面的value值,其实就是“帐号不允许为空”的unicode编码。只有这样,在程序里面读取到这些值的时候才会正确显示中文。有很多工具可以把中文转换成unicode编码,比如,native2ascii工具就可以实现。
7.Action里面,就修改validate方法,原来是直接写的中文字符串,现在应该修改成从配置文件中获取信息了,示例如下:

 public void validate(){  if(account==null || account.trim().length()==0){  this.addFieldError("account", this.getText("k1"));  }  if(password==null || password.trim().length()==0){  this.addFieldError("password", this.getText("k2"));  }if(password!=null && !"".equals(password.trim()) && password.trim().length()<6){  this.addFieldError("password", this.getText("k3"));  }  }

这样我们继承ActionSupport类的信息验证项目就完成了。

struts2继承ActionSupport相关推荐

  1. Struts2实现Preparable接口和【struts2】继承ActionSupport类

    Struts2实现Preparable接口 实现preparable接口,实现public void prepare() throws Exception 方法.当你访问某问action指定方法之前, ...

  2. Struts2学习日记(二)简单的Struts2登陆实现(Action继承ActionSupport类)

    功能实现:实现登陆功能,输入用户名和密码,如果用户名不为hello或者密码不为world,便返回登陆页并提示错误,否则显示登陆结果. 1.打开MyEclipse,创建一个webProject项目. 2 ...

  3. 继承ActionSupport的例子

    ActionSupport是Struts2框架提供的一个便利类,为最常见的操作提供默认实现,继承它后可以做很多操作,例如国际化,验证,等等. ActionSupport是Action下延伸出来的类,它 ...

  4. struts2之action生命周期和ActionSupport

    文章目录 1 action生命周期 2 继承ActionSupport类 2.1 基本的数据验证 2.2 访问本地信息 1 action生命周期 Struts2的Action的生命周期是:Struts ...

  5. Struts2学习第七课 ActionSupport

    com.opensymphony.xwork2.ActionSupport类是默认的Action类,如果某个Action节点没有配置class属性,则ActionSupport即为待执行的Action ...

  6. struts2配置详解

    01.Struts 2基本结构 使用Struts2框架实现用登录的功能,使用struts2标签和ognl表达式简化了试图的开发,并且利用struts2提供的特性对输入的数据进行验证,以及访问Servl ...

  7. struts2 validate验证

    转自:https://blog.csdn.net/houpengfei111/article/details/9038233 自定义拦截器 要自定义拦截器需要实现com.opensymphony.xw ...

  8. Struts2问题总结

    1 如何搭建Struts2开发环境? Struts2 获取   http://struts.apache.org/download.cgi Struts-2.3.16.3-all.zip 创建Web项 ...

  9. Struts2入门这一篇就够了

    前言 这是Strtus的开山篇,主要是引入struts框架...为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门.... 为什么要引入struts? 既然Se ...

  10. Struts2与Struts的区别

    从Struts2的发展过程来看,Struts2继承了Struts与WebWork的血脉,Struts2取两者之精华,形成新德框架,但是struts2还是更多的继承了struts的设计思想,并加入了We ...

最新文章

  1. android开发获取应用本身耗电量_别找了,Android常用自动化工具全在这儿了!
  2. leetcode 300. Longest Increasing Subsequence | 300. 最长递增子序列(动态规划)
  3. 从堆里找回“丢失”的代码
  4. Objective-C 2.0 with Cocoa Foundation --- 3,类的声明和定义
  5. python解析nginx配置文件_Nginx情景分析之配置文件解析
  6. php删除二维数组的某一行某一列_php中怎么去除二维数组的某个字段?
  7. 【iOS报错】“Internal error. Please file a bug at bugreport.apple.com and attach /var/folders/v5/......”
  8. OpenCV轮廓相关操作 C++
  9. main flag redefined: graceful
  10. JAVA——请输入打印一个倒99乘法口诀
  11. 陈学贤华南理工大学计算机专业,张见威 - 华南理工大学 - 计算机科学与工程学院...
  12. Python 毕设精品实战案例——快速索引目录
  13. 微信小程序入门开发教程(详解)
  14. C++ --取出网址中域名和协议名
  15. Lattice Mico8在LMS上中断错误问题
  16. 图卷积神经网络(GCN)目前的应用领域
  17. 计算机网络基础概念与重要定义汇总
  18. lv双肩包尺寸对照表_这10个最火的LV双肩包,我就是不要好好背!
  19. c语言break(c语言break是什么意思)
  20. Java Date类型数据 时间加一天,加一小时,加一分,加一秒

热门文章

  1. Android Studio使用IconFont阿里矢量图标库
  2. 2022年武汉CMMI3-CMMI5认证企业名录
  3. 微积分的发现是人类精神的最高胜利
  4. vue数据大屏使用数字字体
  5. STM32和51系列单片机编程的区别
  6. 51单片机和52单片机区别是什么?51仿真器有必要买吗?
  7. 如何解决VS2017打开安装包运行报错问题
  8. UPC 条形码的介绍及计算校验码
  9. tcs标准编写软件_标准编写工具TCS2017使用指南.PDF
  10. R语言本地安装包教程