Struts2编写Action及获取参数的三种方法

一、编写Action 的三种方法

   1.创建普通类

        自己创建的普通类需要人为定义常量SUCCESS,而且没有表单校验等功能,需要自己编写代码实现。

package com.test.struts2;

public class TestAction2 {

	public String execute()
	{
		return "success";
	}

	public String add()
	{
		return "success";
	}

	public String delete()
	{
		return "error";
	}
}

   2.实现Action接口

      Action接口中定义了常量SUCCESS。

package com.test.struts2;

import com.opensymphony.xwork2.Action;

public class TestAction1 implements Action {

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}

	public String add()
	{
		//System.out.println("我是add()");
		
		return SUCCESS;
	}
}

   3.继承ActionSupport类(最常用 )

       ActionSupport类其实是实现了Action接口的,其中封装的功能较多 实现了表单验证及常量SUCCESS的定义等。

package com.test.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport{
	
	public String execute()
	{
		return SUCCESS;
		
	}
}

二、访问Action的三种方法(method)

   1.action默认调用execute()《在地址栏可以借用 "! 方法名" 的方式访问其他方法》

2.在action标签中配置method属性

3.通配符访问 <地址栏 : localhost:8080/项目名/test_方法名>

三、获取参数 的三种方法

1.属性驱动

2.对象驱动

3.模型驱动

<1>属性驱动

    在Action中定义属性,确保所定义属性名称与 form表单中的 name属性 的值一致,适用于属性个数较少的情况。

public class TeacherAction extends ActionSupport{

	//1.属性驱动--input中name属性值相同(属性个数较少情况)
	private String username;
	private String password;
	
	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String loginUser()
	{
                 //属性驱动
		if(username.equals("wxx") && password.equals("111111"))
		{
			return SUCCESS;
		}
        }
}     

<2>对象驱动

    创建一个对象实例,将表单定义的属性匹配给所定义对象,即以对象为单位,用对象获取属性  方便属性较多的情况。

public class TeacherAction extends ActionSupport{

        private String username;
	private String password;
	
	private User user;

        //........生成get()和 set()方法

        public String loginUser(){

        //对象驱动(将表单数据直接提交的对象的属性  即以对象为单位)
	    if(username.equals(user.username) && password.equals(user.password))
	    {
	        return SUCCESS;
	    }

            return ERROR;
        }
}

<3>模型驱动(常用)

   对象驱动的升级 ,实现 ModelDriven<User>接口,人为将一个对象 User 作为一个 Model ,将 View 层和 Controller 层关联起来,View 层实现表单属相的匹配,同时也可知道Controller 层的功能。getModel()返回 对象user  匹配model 中的属性即可,页面不需要对象。

 

public class TeacherAction extends ActionSupport implements ModelDriven<User>{

	private String username;
	private String password;
	
	//业务层 接口实现业务
	private StudentService service=new StudentServiceIml();
	
	private User user=new User();

        //.........生成get() 和 set()方法

	public String loginUser()
	{
            boolean v=service.valdateUser(user.username,user.password);
		//验证表单数据
	    if(v)
	    {
		return SUCCESS;
	    }

	    return ERROR;
	}
	
	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		
		//得到model  对象user(匹配model里面的属性--不用再写具体对象)
		return user;
	}
}

 ps: 当属性驱动与模型驱动同时存在时,不会执行属性驱动方法,而是直接执行模型驱动来获取参数。

猜你喜欢

转载自blog.csdn.net/weixin_42249629/article/details/81172543