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>