struts2接收参数的5种方法

  • 2019 年 10 月 22 日
  • 筆記

这里总结下Struts2接收参数的5种方法。

1. 使用Action的属性

在action里面定义要接收的参数变量,并提供相应的setter,getter。定义的参数变量需要和提交参数的名称一致。

并不用做数据类型的转换,相应提交方式可以用get和post。

简单举例

如:login.action?name=yanggb&password=123456

jsp:

<form action="login" method="post" name="form1">      用户名:<s:textfield name="username"/><br/>      密 码:<s:password name="password"/><br/>      <s:submit value="提交"/>  </form>

action:

public class LoginAction extends ActionSupport{      private String username;      private String password;        public String getUsername() {          return username;      }        public void setUsername(String username) {          this.username = username;      }        public String getPassword() {          return password;      }        public void setPassword(String password) {          this.password = password;      }  } 

这样,在Action就能接收到前端的请求参数。

2. 使用DomainModel

使用这种方式,在Action里面就不用定义很多的属性,而是用Model层用到的模型,保存它的一个对象。简单理解就是,从上面的单个参数接收,改为多个参数一起接收到一个对象中。相应提交方式可以用get和post。

简单示例

如:login.action?loginUser.username=yanggb&loginUser.password=123456

jsp:

<form action="login" method="post" name="form1">      用户名:<s:textfield name="loginUser.username"/><br/>      密 码:<s:password name="loginUser.password"/><br/>      <s:submit value="提交"/>  </form>

action:

public class LoginAction extends ActionSupport {      // 错误的写法,不能自己实例化,struts会自动实例化      // private User loginUser = new Users();      private User loginUser;        public User getLoginUser() {          return loginUser;      }        public void setLoginUser(User loginUser) {          this.loginUser = loginUser;      }  }

entity:

public class User {      private String username;      private String password;        public String getUsername() {          return username;      }        public void setUsername(String username) {          this.username = username;      }        public String getPassword() {          return password;      }        public void setPassword(String password) {          this.password = password;      }  }

这样,在Action就能接收到前端的请求参数(可以通过实体去取参数)。

3. 使用DTO–数据传输对象(Data Transfer Object)

它的作用是接收参数和传递参数,并不是项目中的实体类。

如用户注册时,会用到确认密码,所以要先把参数接收过来,做处理后,再传递给相应方法去创建User对象。

提交参数的方式和Domain Model方式相同。

简单示例

如:login.action?userDTO.name=yanggb&userDTO.password=123456

DTO:

public class UserDTO {      private String name;      private String password;      private String confirm;        public String getName() {          return name;      }        public void setName(String name) {          this.name = name;      }        public String getPassword() {          return password;      }        public void setPassword(String password) {          this.password = password;      }        public String getConfirm() {          return confirm;      }        public void setConfirm(String confirm) {          this.confirm = confirm;      }  }

Action:

public class LoginAction extends ActionSupport {      private UserDTO userDTO;        public UserDTO getUserDTO() {          return userDTO;      }        public void setUserDTO(UserDTO userDTO) {          this.userDTO = userDTO;      }        public void execeute() {          System.out.println("姓名: " + userDTO.getName());      }  }

这样,在Action就能接收到前端的请求参数(可以通过DTO去取参数)。

4.使用ModelDriven

在创建Action的时候,只要Action实现了ModelDriven接口,就可以去调用接口的getModel()方法去取相关对象。

相应提交方式可以用get和post。

如:login.action?username=yanggb&password=123456

jsp:

<form action="login" method="post" name="form1">      用户名:<s:textfield name="username"/><br/>      密 码:<s:password name="password"/><br/>      <s:submit value="提交"/>  </form>

action:

public class loginAction extends ActionSupport implements ModelDriven<User>{      private User user = new User(); // 手动实例化        public User getModel() {          return user; // 返回实例      }  }

5.使用Request对象

此方法与传统的JSP等传接参数一样,即使用request.getParameter()方法来接收参数。

简单示例

如:login.action?name=yanggb

action:

public class LoginAction extends ActionSupport {      public void execeute() {          String name = super.getRequest().getParameter("name");          System.out.println("姓名:" + name); // yanggb      }  }

这种方式几乎是最简单的。

 

“有些事情不是你努力就会有结果,有些人也不是你坚持就能够留得住。”