struts2两天快速入门第二天上午(输入校验)

1、新建一个UserRegAction,为了方便编程,继承于ActionSupport

 

 public class UserRegAction extends ActionSupport{

	private static final long serialVersionUID = -3132955950082594812L;
	private User user;//不用初始化
	
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public String execute(){
		//这里其实返回的是一个小写的字符串"success"
		return  Action.SUCCESS;
	}
	@Override
	public void validate() { 
		//执行完validate,一旦FieldError不为空,就会返回input视图给用户,不再执行业务逻辑方法
		if(null==user.getUsername()||"".equals(user.getUsername().trim())){
			this.addFieldError("user.username", "用户名不能不空!");
		}else if(user.getUsername().length()<6||user.getUsername().length()>15){
			this.addFieldError("user.username", "用户名长度必需在6~15之间!!");
		}else if(!user.getUsername().matches("[\\w]+")){
			this.addFieldError("user.username", "用户名只能是字母、数字或_符号!");
		}
		if(null==user.getPassword()||"".equals(user.getPassword().trim())){
			this.addFieldError("user.password", "密码不能不空!");
		}else if(user.getPassword().length()<6||user.getPassword().length()>15){
			this.addFieldError("user.password", "密码长度必需在6~15之间!");
		}
		if(null==user.getRepassword()||"".equals(user.getRepassword().trim())){
			this.addFieldError("user.repassword", "重复密码不能不空!");
		}else if(!user.getPassword().equals(user.getRepassword())){
			this.addFieldError("user.repassword", "输入密码不一致!");
		}
		if(null==user.getEmail()||"".equals(user.getEmail().trim())){
			this.addFieldError("user.email", "邮箱不能不空!");
		}else if(!user.getEmail().matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+")){
			this.addFieldError("user.email", "邮箱格式有误!");
		}
	}
}

    知识提示:addFieldError方法属于ActionSupport类,其实里面是使用Map把错误信息以键值的方式存储。当执行完 validate方法后,接着会调用ActionSupport的hasErrors()方法,一旦存在错误信息,就返回input视图给用户,不再执行execute方法.最后在页面显示出这些信息给用户.

 

2、在struts.xml里配置

 <!-- 测试数据校验 -->
    <package name="testvalidate" namespace="/test3" extends="struts-default">
    	<!-- 用户注册界面 -->
    	<action name="registerUI">
    		<result>/WEB-INF/jsp/register.jsp</result>
    	</action>
    	<!-- 用户注册 -->
    	<action name="register" class="cn.gkit.action.UserRegAction">
    		<result name="input">/WEB-INF/jsp/register.jsp</result>
    		<result name="success">/WEB-INF/jsp/welcome.jsp</result>
    	</action>
    </package>

3、新建register.jsp页面,为了简洁,这里不对页面进行布局.

 <s:form action="register" namespace="/test3"> 
  		    用户名:<s:textfield name="user.username" />
  	     <s:fielderror cssStyle="color:red;" >
  		<s:param>user.username</s:param>
  	     </s:fielderror><br/>
  		      密码:<s:password name="user.password"/>
  	     <s:fielderror cssStyle="color:red;">
  		 <s:param>user.password</s:param>
  	     </s:fielderror><br/>
 	         重复密码:<s:password name="user.repassword"/>
  	     <s:fielderror cssStyle="color:red;" >
  	      	<s:param>user.repassword</s:param>
  	     </s:fielderror><br/>
                  电子邮箱:<s:textfield name="user.email"/>
            <s:fielderror cssStyle="color:red;" >
                <s:param>user.email</s:param>
            </s:fielderror><br/>
            <s:submit value="提交"/>
    </s:form>

 知识提示:<s:fielderror />是从fielderror里面取出错误信息,<s:param />是取出指定key的错误消息.

 

4、validate方法会对action里面的所有业务方法进行校验,但如何只对指定的方法进行校验呢?

      如增加一个reg方法:

   

public String reg(){
       return   Action.SUCCESS;
}

   写一个只对reg业务方法进行校验的方法:

  

public void validateReg(){
//写验证代码,类似之前写的validate方法
}

   知识提示:如果一个action里面有多个业务方法,指定要校验的方法名的定义规则:validate+业务方法名(首字母要大写).

    执行流程: 封装表单数据后-->先调用validateReg方法-->再调用validate方法. validate方法最终还是会被调用的。所以当action里面有多个业务方法时,我们不会去重写validate方法,而是对应每一个业务方法都写一个验证方法.  如果要写一个只对execute方法校验的方法,一样方法名可以写成validateExecute方法.

 

下一节:改成基于框架的校验方式.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值