struts2继承ActionSupport
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相关推荐
- Struts2实现Preparable接口和【struts2】继承ActionSupport类
Struts2实现Preparable接口 实现preparable接口,实现public void prepare() throws Exception 方法.当你访问某问action指定方法之前, ...
- Struts2学习日记(二)简单的Struts2登陆实现(Action继承ActionSupport类)
功能实现:实现登陆功能,输入用户名和密码,如果用户名不为hello或者密码不为world,便返回登陆页并提示错误,否则显示登陆结果. 1.打开MyEclipse,创建一个webProject项目. 2 ...
- 继承ActionSupport的例子
ActionSupport是Struts2框架提供的一个便利类,为最常见的操作提供默认实现,继承它后可以做很多操作,例如国际化,验证,等等. ActionSupport是Action下延伸出来的类,它 ...
- struts2之action生命周期和ActionSupport
文章目录 1 action生命周期 2 继承ActionSupport类 2.1 基本的数据验证 2.2 访问本地信息 1 action生命周期 Struts2的Action的生命周期是:Struts ...
- Struts2学习第七课 ActionSupport
com.opensymphony.xwork2.ActionSupport类是默认的Action类,如果某个Action节点没有配置class属性,则ActionSupport即为待执行的Action ...
- struts2配置详解
01.Struts 2基本结构 使用Struts2框架实现用登录的功能,使用struts2标签和ognl表达式简化了试图的开发,并且利用struts2提供的特性对输入的数据进行验证,以及访问Servl ...
- struts2 validate验证
转自:https://blog.csdn.net/houpengfei111/article/details/9038233 自定义拦截器 要自定义拦截器需要实现com.opensymphony.xw ...
- Struts2问题总结
1 如何搭建Struts2开发环境? Struts2 获取 http://struts.apache.org/download.cgi Struts-2.3.16.3-all.zip 创建Web项 ...
- Struts2入门这一篇就够了
前言 这是Strtus的开山篇,主要是引入struts框架...为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门.... 为什么要引入struts? 既然Se ...
- Struts2与Struts的区别
从Struts2的发展过程来看,Struts2继承了Struts与WebWork的血脉,Struts2取两者之精华,形成新德框架,但是struts2还是更多的继承了struts的设计思想,并加入了We ...
最新文章
- android开发获取应用本身耗电量_别找了,Android常用自动化工具全在这儿了!
- leetcode 300. Longest Increasing Subsequence | 300. 最长递增子序列(动态规划)
- 从堆里找回“丢失”的代码
- Objective-C 2.0 with Cocoa Foundation --- 3,类的声明和定义
- python解析nginx配置文件_Nginx情景分析之配置文件解析
- php删除二维数组的某一行某一列_php中怎么去除二维数组的某个字段?
- 【iOS报错】“Internal error. Please file a bug at bugreport.apple.com and attach /var/folders/v5/......”
- OpenCV轮廓相关操作 C++
- main flag redefined: graceful
- JAVA——请输入打印一个倒99乘法口诀
- 陈学贤华南理工大学计算机专业,张见威 - 华南理工大学 - 计算机科学与工程学院...
- Python 毕设精品实战案例——快速索引目录
- 微信小程序入门开发教程(详解)
- C++ --取出网址中域名和协议名
- Lattice Mico8在LMS上中断错误问题
- 图卷积神经网络(GCN)目前的应用领域
- 计算机网络基础概念与重要定义汇总
- lv双肩包尺寸对照表_这10个最火的LV双肩包,我就是不要好好背!
- c语言break(c语言break是什么意思)
- Java Date类型数据 时间加一天,加一小时,加一分,加一秒