Struts2的Action(二)

  Struts2的Action可以是一个POJO(即简单的javaBean),也实现Action接口,或者继承ActionSupport类。

  1.Action接口:

public interface Action { public static final String SUCCESS = "success"; public static final String NONE = "none"; public static final String ERROR = "error"; public static final String INPUT = "input"; public static final String LOGIN = "login"; public String execute() throws Exception; }

  将LoginAction实现Action接口,则execute方法可以改为:

public String execute() {

        if(getUserName().equals("kaima") && getPassword().equals("asd")) {

            return SUCCESS;

        }

        else

            return ERROR;

    }

  Action运行所用到的数据都保存在ActionContext中,继续修改我们的LoginAction:

    public String execute() {

        if(getUserName().equals("kaima") && getPassword().equals("asd")) {

            ActionContext.getContext().getSession().put("name", userName);

            return SUCCESS;

        }

        else

            return ERROR;

    }

  上面这句话相当于session.setAttribute("name", userName)。这样,在我们的JSP页面中就能使用name这个值了。

 

  2.ActionSupport类就比较复杂,提供了数据校验功能。

  将LoginAction继承ActionSupport类,修改execute并覆盖validate()方法:

    public String execute() {

        if(getUserName().equals("kaima") && getPassword().equals("asd")) {

            return SUCCESS;

        }

        else

            return ERROR;

    }

    

    @Override

    public void validate() { //validate方法在execute之前执行

        if(userName == null || userName.equals(""))

            this.addFieldError("username", "用户名不能为空");

        if(password == null || password.equals(""))

            this.addFieldError("password", "密码不能为空");

    }

  validate()方法会在execute方法前执行,如果没通过,会将错误信息存放到Action的fieldError中,并将请求转发到input对应的逻辑视图中。在struts.xml中指定input对应的视图:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC

   "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

   "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

   <package name="myStruct" extends="struts-default">

      <action name="login" class="myWeb.LoginAction"> 

            <result name="success">/welcome.jsp</result>

            <result name="error">/error.jsp</result>

            <result name="input">/login.jsp</result>

      </action>

   </package>

</struts>

  如果想将错误信息显示出来,需要在login.jsp中加上:

<%@ taglib uri="/struts-tags" prefix="s" %>

  并在你想显示错误信息的地方加上:

<s:fielderror></s:fielderror>

<form action="login.action" method="post">

<table>......

  这里我是在table前加上错误信息的显示,如果用户不输入用户名/密码,就会如下:

你可能感兴趣的:(struts2)