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

r囧r小猫 2022-05-19 09:05 310阅读 0赞

一、编写Action 的三种方法

1.创建普通类

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

  1. package com.test.struts2;
  2. public class TestAction2 {
  3. public String execute()
  4. {
  5. return "success";
  6. }
  7. public String add()
  8. {
  9. return "success";
  10. }
  11. public String delete()
  12. {
  13. return "error";
  14. }
  15. }

2.实现Action接口

Action接口中定义了常量SUCCESS。

  1. package com.test.struts2;
  2. import com.opensymphony.xwork2.Action;
  3. public class TestAction1 implements Action {
  4. @Override
  5. public String execute() throws Exception {
  6. // TODO Auto-generated method stub
  7. return SUCCESS;
  8. }
  9. public String add()
  10. {
  11. //System.out.println("我是add()");
  12. return SUCCESS;
  13. }
  14. }

3.继承ActionSupport类(最常用 )

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

  1. package com.test.struts2;
  2. import com.opensymphony.xwork2.ActionSupport;
  3. public class HelloAction extends ActionSupport{
  4. public String execute()
  5. {
  6. return SUCCESS;
  7. }
  8. }

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

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

70

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

70 1

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

70 2

三、获取参数 的三种方法

1.属性驱动

2.对象驱动

3.模型驱动

<1>属性驱动

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

70 3

  1. public class TeacherAction extends ActionSupport{
  2. //1.属性驱动--input中name属性值相同(属性个数较少情况)
  3. private String username;
  4. private String password;
  5. public void setUsername(String username) {
  6. this.username = username;
  7. }
  8. public String getPassword() {
  9. return password;
  10. }
  11. public void setPassword(String password) {
  12. this.password = password;
  13. }
  14. public String loginUser()
  15. {
  16. //属性驱动
  17. if(username.equals("wxx") && password.equals("111111"))
  18. {
  19. return SUCCESS;
  20. }
  21. }
  22. }

<2>对象驱动

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

70 4

  1. public class TeacherAction extends ActionSupport{
  2. private String username;
  3. private String password;
  4. private User user;
  5. //........生成get()和 set()方法
  6. public String loginUser(){
  7. //对象驱动(将表单数据直接提交的对象的属性 即以对象为单位)
  8. if(username.equals(user.username) && password.equals(user.password))
  9. {
  10. return SUCCESS;
  11. }
  12. return ERROR;
  13. }
  14. }

<3>模型驱动(常用)

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

70 5

70 6

  1. public class TeacherAction extends ActionSupport implements ModelDriven<User>{
  2. private String username;
  3. private String password;
  4. //业务层 接口实现业务
  5. private StudentService service=new StudentServiceIml();
  6. private User user=new User();
  7. //.........生成get() 和 set()方法
  8. public String loginUser()
  9. {
  10. boolean v=service.valdateUser(user.username,user.password);
  11. //验证表单数据
  12. if(v)
  13. {
  14. return SUCCESS;
  15. }
  16. return ERROR;
  17. }
  18. @Override
  19. public User getModel() {
  20. // TODO Auto-generated method stub
  21. //得到model 对象user(匹配model里面的属性--不用再写具体对象)
  22. return user;
  23. }
  24. }

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

发表评论

表情:
评论列表 (有 0 条评论,310人围观)

还没有评论,来说两句吧...

相关阅读