接受请求参数的方式

action接受来自表单的数据的方式有三种:

  • 属性驱动(直接通过getter/setter来获取)
  • 域驱动(封装一个实体类来获取)
  • 模型驱动
一、属性驱动
直接通过action封装jsp发送过来的数据。
login.jsp
<span>${errors }</span>
<form action="login.action" method="post">
  用户名:<input type="text" name="username" value="${username }"><br>
 密&nbsp码:<input type="password" name="password"><br>
 <input type="submit" value="提交">
</form>
LoginAction.java
package com.action;
public class LoginAction {
      private String username;//属性名必须与表单的一致。
      private String password;
      private String errors;
      public String getErrors() {
            return errors;
      }
      public void setErrors(String errors) {
            this.errors = errors;
      }
      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;
      }
      public String execute(){     
            System.out.println("com.action.LoginAction");
            if(username.equals("admin")&&password.equals("123")){
                  return "success";
            }
            this.errors = "用户名或密码错误!";
            System.out.println(username+":"+password+":"+errors);
            return "failure";
      }
      @Override
      public String toString() {
            return "LoginAction [username=" + username + ", password=" + password
                        + ", errors=" + errors + "]";
      }
}

二、域驱动
通过一个user类来封装jsp页面发送到来的数据。
login.jsp
<span style="color: red">${user.errors }</span>
<form action="login.action" method="post">
  用户名:<input type="text" name="user.username" value="${user.username }"><br>
 密&nbsp码:<input type="password" name="user.password"><br>
 <input type="submit" value="提交">
</form>
注意:必须通过user.属性名来访问资源。
LoginAction.java
package com.action;
import com.domain.User;
public class LoginAction {
      private User user;
      public User getUser() {
            return user;
      }
      public void setUser(User user) {
            this.user = user;
      }
      public String execute(){
            
            System.out.println("com.action.LoginAction");
            if(user.getUsername().equals("admin")&&user.getPassword().equals("123")){
                  return "success";
            }
            this.user.setErrors("用户名或密码错误!");
            System.out.println(user);
            return "failure";
      }
}


三、模型驱动
通过实现拦截器ModelDriven来封装数据。即通过getModel方法获取对象来封装数据。
login.jsp
<span style="color: red">${errors }</span>
<form action="login.action" method="post">
  用户名:<input type="text" name="username" value="${username }"><br>
 密&nbsp码:<input type="password" name="password"><br>
 <input type="submit" value="提交">
</form>
LoginAction.java
package com.action;
import com.domain.User;
import com.opensymphony.xwork2.ModelDriven;
public class LoginAction implements ModelDriven<User> {
      private User user;
      public String execute(){   
            System.out.println("com.action.LoginAction");
            if(user.getUsername().equals("admin")&&user.getPassword().equals("123")){
                  return "success";
            }
            this.user.setErrors("用户名或密码错误!");
            System.out.println(user);
            return "failure";
      }
      @Override
      public User getModel() {
            if(this.user == null){
                  user = new User();
            }
            return user;
      }
}

三、集合类参数

可以使用泛型集合来接受多个相同的对象参数。
login.jsp
<form action="login.action" method="post">
  用户名:<input type="text" name="user[0].username" ><br>
 密&nbsp码:<input type="password" name="user[0].password"><br>
   用户名:<input type="text" name="user[1].username" ><br>
 密&nbsp码:<input type="password" name="user[1].password"><br>
 <input type="submit" value="提交">
</form>
LoginAction.java
package com.action;
import java.util.List;
import com.domain.User;

public class LoginAction {
      
      private List<User> user;
      
      public void setUser(List<User> user) {
            this.user = user;
      }
      public List<User> getUser() {
            return user;
      }
      public String execute(){
            
            System.out.println(user.size());
            
            return "success";
      }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值