Struts2框架中为什么要继承ActionSupport类,以及实现过程
struts可以继承ActionSupport类,也可以不继承,继承的好处简单来说就是更方便实现验证,国际化等功能,与struts2的功能结合紧密,方便我们开发。
ActionSupport类的作用:
此类实现了很多实用的接口,提供了很多默认的方法,这些默认方法包括国际化信息,默认的处理用户请求的方法等,可以大大简化action的开发,在继承ActionSupport的情况下,必须有无参构造函数。
下面用在struts2框架搭建完成的基础上,用 用户请求的例子来实现ActionSupport类:
1.创建视图层两个页面index.jsp和welcome.jsp页面,下面只展示index.jsp页面,welcome.jsp页面的代码自己简单写一下看一下效果就行。这个jsp页面的<s:fielderror/>标签会在相应的字段处输出错误信息。
<%@ 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>Insert title here</title>
<style type="text/css">
ul,li {list-style-type:none;margin:0px;float:left;
}
</style>
</head>
<body> <form action="helloworldAction" 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.实现action类封装HTTP请求参数,类里面应该包含与请求参数对应的属性,并为属性提供get,set方法,再说一次,在继承ActionSupport的情况下,必须有无参构造函数。
validate方法内部,对请求传递过来的数据进行校验,而且我们也能看出来同一个数据可以进行多方面的验证,如果不满足要求,内容将会在页面上直接显示。里面重写了 execute() throws Exception方法,返回字符串。
package com.hnpi.action;import com.opensymphony.xwork2.ActionSupport;public class RegisterAction 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;} }
3.从上面我们也可以看出来,validate方法是没有返回值的,如果验证不成功的话,错误信息该怎么在页面上显示出来呢?我们需要在struts.xml中的Action配置里面,添加一个名称为input的result配置,没有通过验证,那么会自动跳转回到该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="helloworld" extends="struts-default"> <action name="helloworldAction" class="com.hnpi.action.RegisterAction"> <result name="toWelcome">/welcome.jsp</result> <result name="input">/index.jsp</result> </action> </package> </struts>
下面我们来看一下代码效果图:
这个例子可以看出来,validate方法会先于execute方法被执行,只有validate方法执行后,又没有发现验证错误的时候,才会运行execute方法,否则会自动跳转到你所配置的input所对应的页面。
Struts2框架中为什么要继承ActionSupport类,以及实现过程相关推荐
- Struts2学习日记(二)简单的Struts2登陆实现(Action继承ActionSupport类)
功能实现:实现登陆功能,输入用户名和密码,如果用户名不为hello或者密码不为world,便返回登陆页并提示错误,否则显示登陆结果. 1.打开MyEclipse,创建一个webProject项目. 2 ...
- Struts2框架中的Action接口和ActionSupport类
Struts2框架中的Action接口和ActionSupport类 1.Action接口 2.ActionSupport类 3.登录案例 3.1.页面 3.2.控制器 3.3.struts.xml配 ...
- Struts2实现Preparable接口和【struts2】继承ActionSupport类
Struts2实现Preparable接口 实现preparable接口,实现public void prepare() throws Exception 方法.当你访问某问action指定方法之前, ...
- java struts2国际化代码下载_【Java框架】java struts2框架中页面表示国际化的方法 - 思诚科技...
在struts2框架中,前端页面表示国际化的实现更加简单.简单的应用struts2框架提供的支持国际化的表达式即可快速方便的进行页面的国际化的实现.如何做呢?本文以英文和中文为例进行说明. 1,自定义 ...
- Struts2框架中s:if标签和s:set标签小结
版权:JavaIT学习室 转载请标明,http://www.javait.org 最近发表了几篇文章都是对在使用Struts2框架中的标签进行一些知识点的归纳.今天这篇文章是对s:if标签和s:set ...
- yii2.0框架中自定义接口,实现类的多继承
一.前言 最近有个需求,比如有A,B,C,D四个文件,原来的逻辑是,A继承B,C继承D.后来由于A和C的逻辑太像,既然如此的话,为什么不把A,C写一起呢,第一是方便维护,第二也是减少无用的代码,说干就 ...
- QT和MFC中怎么使用继承基类的自定义控件放置在界面上
1.Qt中自定义button继承于QPushButton,f2查看指定控件的声明定义,可以手动改ui.form.h文件里各个类型的控件指针变量,改成自己定义的" (这里ui.form.h在工 ...
- java中接口可不可以继承一般类,为什么?
不可以因为接口中只能出现3种成员 1.公共的静态常量(public final static ) 2.公共的抽象方法(public abstract ) 3.静态内部类(static class) 而 ...
- 使用struts2框架中3种客户端向服务端发送请求参数的方式
1.action属性: 前端参数直接在action属性名之后,如PersonAction?id=1; 在对应的action中加入属性id,必须加对应属性的get(),set()方法,其中属性名应为小写 ...
- Java中是否可以继承String类,为什么
详细解析: 1. 关于final修饰符 参考文章: 浅析Java中的final关键字 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的&qu ...
最新文章
- WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)
- bootcmd 和 bootargs 环境变量
- Linux基础:Shell脚本学习
- C#中Hashtable、Dictionary详解以及写入和读取对比
- SAP Spartacus User form通过label标签的实现原理
- 计算机88端口,计算机常用端口一览表
- java实现人脸识别V3版本开发
- 关于区块链,程序员需要了解什么
- ambari搭建注意事项
- java 判断请求为 ajax请求_请问如何判断一个请求是不是ajax请求?
- function好的写法
- Ghostexp.exe
- java 继承抽象类_java基础之继承,抽象类
- 申请软件著作权有哪些好处,你知道吗?
- w10计算机右键管理,电脑右键新建菜单管理,win10右键新建菜单管理-
- 计算机管理员禁用teredo怎么解决,计算机管理员已在本地禁用teredo什么意思
- python itchat实现调用微信接口的第三方模块方法
- C# 后台GC 的前因后果
- 三、项目进度管理(输入/工具与技术/输出)
- 图片怎么转成PDF格式?介绍三种转换思路