继承ActionSupport方法
1)重写validate() ------校验action的全部方法,在方法调用之前被调用,出现错误返回input
2)重写validateXxx()------校验action的Xxx指定方法,在方法调用之前被调用,出现错误返回input
以用户登录模块为例:先写个loginform.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:fielderror></s:fielderror>
<s:fielderror fieldName="password"> <!-- 用fieldName输出指定字段信息 -->
<s:actionmessage/>
<s:form action="login">
<s:textfield name="loginName" label="用户名"></s:textfield>
<s:password name="password" label="密码"></s:password>
<s:submit value="登录"></s:submit>
</s:form>
</body>
</html>
接着,我们写一个登录处理的Action类:loginAction.java,代码如下:
package cn.simple.action; import org.apache.struts2.convention.annotation.Result; @Results({ private String loginName; @Override else{ addActionMessage("恭喜你登录成功"); } //*******Getter和Setter方法***********// public String getPassword() { |
解释一下这个类吧:
execute 这个方法是重写了父类ActionSupport的方法,是Action默认会执行的方法,即访问…/login.action或者…/login,它默认会执行这个方法。 validate 在执行execute方法之前,它会先执行validate这个方法,检查登录框是否输入正确,这个方法也是重写了父类的validate方法。 getter和setter,有了setter方法,才能使action能拿到上一个JSP页面传过来的Request域的数据;有了getter方法,下一个转发(dispatcher)过去的页面才能拿到此Action的Request域的数据。 执行过程是这样:表单提交给LoginAction,LoginAction先执行validate方法,检验loginName和password是否符合要求,如果不符合,就会addFieldError (把错误信息放到Field栈里),如果Field栈里有错误信息的话,它就不会再执行execute方法,直接转发(Dispatcher)到INPUT即“input”所指定的错误处理页面,这里为location="loginform.jsp",即让它返回到表单登录页去,如果刚才validate方法中验证正确,即Field栈中没有错误信息,就会执行execute方法。在这里execute返回SUCCESS,即“success”,根据Result注解,重定向到success.jsp页面 |
success.jsp:
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:actionmessage/>
</body>
</html>