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
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: 当属性驱动与模型驱动同时存在时,不会执行属性驱动方法,而是直接执行模型驱动来获取参数。
还没有评论,来说两句吧...