必威体育Betway必威体育官网
当前位置:首页 > IT技术

Struts2框架中为什么要继承ActionSupport类,以及实现过程

时间:2019-10-02 10:15:47来源:IT技术作者:seo实验室小编阅读:70次「手机版」
 

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"/>  
    <p> 
        <font color=red><s:fielderror fieldName="account"/></font>
        <br/>
          账号:<input type="text" name="account">
    </p>
    <p>
        <font color=red><s:fielderror fieldName="password"/></font>
        <br/>
            密码:<input type="password" name="password">
    </p>
    <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所对应的页面。

相关阅读

2018最赚钱的创业项目:智能机器人!有创业者已月赚100万!

近两年,我国人工智能发展迅速,不仅是创业者们的首选项目,就连教育部近日都印发了《高等学校人工智能创新行动计划》,提出加强新一代人

2019校招农行笔试范围与经验

就在今天上午刚刚参加了2019校招农行的笔试,在此想写下与大家一起分享下,也给后面的你们一些经验。 试题90分钟,周六上午9:00-11:00,去

基于FFmpeg的H265编码器

H265编码器仍旧采用变换和预测的混合编码方法。输入帧以宏块为单位被编码器处理,首先按照帧内或帧间预测编码的方法进行处理;接

920全球双十一备货节入口在哪里?活动时间多久?

920备货节终于来了,还有不知道的小伙伴吗?今年920大促的主题是“全球双十一备货节”,大家可别小瞧了920备货节哦,它的销售情况可以影

2019将定义奢侈品电商的七大趋势:数字营销应成为核心

到2025年,奢侈品品牌的在线销售额有望达到700亿美元。从实体店过渡到在线定位奢侈品牌是从2019年起增长的关键。数字营销应该成为

分享到:

栏目导航

推荐阅读

热门阅读