ActionSupport类,他是提供了一个Action接口和其他几个有用接口的默认实现的便利类,提供了 数据验证,错误消息本地化等功能。
我们先来看看简单的数据验证。
我们实现一个登陆时,验证用户提交的用户名和密码是否为空这个功能。
先写action,LoginAction,他继承自ActionSupport。
package com.action; import com.opensymphony.xwork2.ActionSupport; import com.po.User; public class LoginAction extends ActionSupport{ private User user; public String execute() throws Exception { return "success"; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public void validate() { if(user.getName().trim().equals("") ||user.getPassword().trim().equals("")) { this.addActionError("用户名或者密码为空"); } } }
我们重写ActionSupport的validate方法,当有错误时,我们可以追加错误,利用函数
addActionError(“错误信息)。validate方法没有返回值,那么框架怎么得知我们的验证是否成功呢?
它的内部实现是基于workflow拦截器,workflow拦截器检查是否生成了错误信息,如果找到错误信息,workflow拦截器把工作流找到我们result中定义的name="input"的页面。没有错误的话,就继续执行工作流。
<result name="input">/index.jsp</result> name="input"定义当验证出错时候跳转的页面,验证出错跳转到index页面。
input的定义如下:
<?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="Login" class="com.action.LoginAction" > <result name="success">/weclome.jsp</result> <result name="failed">/index.jsp</result> <!-- 验证出错后跳转的页面 --> <result name="input">/index.jsp</result> </action> </package> </struts>
我们的jsp页面:
我们可以利用 <s:actionerror/>输出错误信息。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix= "s" uri = "/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <!-- 输出错误信息 --> <s:actionerror/> <s:form method="post" action="Login.action"> <s:textfield name="user.name" label="用户名"></s:textfield> <s:password name="user.password" label="密码"/> <s:submit value = "登 录" align="center"/> </s:form> </body> </html>