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前加上错误信息的显示,如果用户不输入用户名/密码,就会如下:

时间: 2024-08-13 18:16:53

Struts2的Action(二)的相关文章

Struts2(四)Action二配置

一.method参数 action package com.pb.web.action; public class HourseAction { public String add(){ System.out.println("执行添加操作!"); return "success"; } public String update(){ System.out.println("执行更新操作!"); return "success"

Struts2框架学习(二) Action

Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器拦截请求,创建代理Action对象,执行方法,返回结果,界面跳转. 拦截器解析请求路径,获取Action的名称,到配置文件中查找action的完整类名,利用反射创建对象. 每请求一次,就创建一个对象,所以action是多例的,也是线程安全的. 2,关系 请求的路径和配置文件的对应关系: 配置文件中包

Struts2基础学习(二)&mdash;Action

一.ActionSupport      为了让用户开发的Action类更加规范,Struts2提供了一个Action接口,这个接口定义了Struts2的Action处理类应该实现的规范.下面是标准Action接口的代码: public interface Action { public static final String SUCCESS = "success"; public static final String NONE = "none"; public

Struts2学习(二)运行Action中方法的三种方式

1.运行execute()方法 一般的能够直接在action中书写execute,调用action时会自己主动运行此方法 2.配置method方法 在struts.xml中配置action时.写method属性设置方法.例如以下所看到的.这样写能够在一个action类中写多个运行的方法.简化结构. <package name="user" extends="struts-default" namespace="/user"> <

在Struts2的Action中取得请求参数值的几种方法

把参数放到作用域里面去. 如:action 中: request.setAttribute("参数名","值");   页面上:  request.getAttribute("参数名"); request.getParameter()方法完全可以获得URL参数,检查下是否参数名写错 你使用的是不是BaseAction.如果就是server.getRequest().getParameter() 看看你的控件是不是 name 属性!如果id的话就获

struts2的action是多例,servlet是单例

struts2中action是多例的,即一个session产生一个action如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修改时间不同,两个用户访问得到的 属性不一样,操作得出的结果不一样.举个例子:有一块布长度300cm,能做一件上衣(用掉100cm)和一件裤子(用掉200cm);甲和乙同时访问得到的 长度都是300cm,甲想做上衣和裤子,他先截取100cm去做上衣,等上衣做完再去做裤子,而乙这时正好也拿100cm去做上衣,那 好,等甲做完上衣再做裤子的时候发现剩下的布(

struts2中action手动获取參数

struts2中action手动获取Session,jsp页面參数 1. ActionContext 在Struts2开发中,除了将请求參数自己主动设置到Action的字段中,我们往往也须要在Action里直接获取请求(Request)或会话(Session)的一些信息, 甚至须要直接对JavaServlet Http的请求(HttpServletRequest),响应(HttpServletResponse)操作. 我们须要在Action中取得request请求參数"username"

Struts2初学 Struts2的action接收用户数据方式

一.简介    开发Web应用程序,首先应会遇到对用户输入数据的接收,传统的Web应用程序是由开发人员调用HttpServletRequest的getparameter(String name)方法从请求中获取数据,而Web框架都提供了数据绑定机制,由框架从请求中获取数据然后绑定到一个JavaBean对象中. Struts2提供了多种方式用于接收用户输入的数据. Struts2的action完全与Web解耦,要获取Web层的数据,需要使用ActionContext,它为action提供了一个执行

Struts2框架(二)

一.Struts2配置 1.Struts2的Action的开发的几种方式 方式1:继承ActionSupport.(推荐使用)如果使用Struts2的数据校验功能,必须继承此类. 方式2:实现Action接口. 方式3:不继承任何类,不实现任何接口. 2.通配符 在Struts2的配置信息中,可以用*与{1}可以优化配置. <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC