首页 > 代码库 > Struts2 -- 获取请求参数

Struts2 -- 获取请求参数

1.直接将action做一个model,就可以得到请求参数.

      缺点:需要单独定义javaBean,将action中属性copy到javaBean中。    
                 优点:简单。                
                 这种方式 ,底层是通过反射来实现的。

//获取请求参数  属性驱动  第一种,直接将action做为modelpublic class DemoAction 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;    }    @Override    public String execute() throws Exception {        HttpServletRequest request = ServletActionContext.getRequest();        // 2.判断用户名与密码是否正确        if ("tom".equals(username) && "123".equals(password)) {            request.getSession().setAttribute("username", username);            return SUCCESS;        } else {            request.setAttribute("login.message", "用户名或密码错误");            return "failer";        }    }}

 

 

2.在action中声明一个model。

2.在action中声明一个model。
       private User user;提供get/set方法
                
         在页面上使用ognl来描述
        <input type="text" name="user.username">
                
          优点:简单,解决了第一种封装的问题
          缺点:在页面上使用了ognl表达式,页面不通用了。
                
          问题:这种方式,数据是怎样封装的?
          是通过struts2中的interceptor进行了数据封装.
          <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

//获取请求参数  属性驱动  第二种,直接在action声明一个modelpublic class DemoAction  extends ActionSupport {    private User user;    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }    @Override    public String execute() throws Exception {        HttpServletRequest request = ServletActionContext.getRequest();        // 2.判断用户名与密码是否正确        if ("tom".equals(user.getUsername()) && "123".equals(user.getPassword())) {            request.getSession().setAttribute("username", user.getUsername());            return SUCCESS;        } else {            request.setAttribute("login.message", "用户名或密码错误");            return "failer";        }    }}

 

3.模型驱动

步骤:
                1.让action类实现ModelDriven
                2.重写getModel方法
                3.在action中实现化一个model对象,让getModel方法返回这个对象。
                 
            优点:解决了属性驱动存在的问题
            缺点:一次只能封装一个model对象.
            
             struts2 有很多围绕模型驱动的特性
            * <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 为模型驱动提供了更多特性

 

public class Login1Action extends ActionSupport implements ModelDriven<User>{        private User user = new User();    @Override    public User getModel() {        return user;    }        @Override    public String execute() throws Exception {
System.out.println(user.getUsername()
+" --> "+user.getPassword());
return null; }}

 


 

扩展:
        1.将数据封装到List集合
            页面:
                username1:<input type="text" name="users[0].username"><br>
                password1:<input type="password" name="users[0].password"><br>
                
                username2:<input type="text" name="users[1].username"><br>
                password2:<input type="password" name="users[1].password"><br>
            
            action类:
                private List<User> users;
                get/set方法
                
        2.将数据封装到Map集合
            页面:
                username1:<input type="text" name="map[‘aaa‘].username"><br>
                password1:<input type="password" name="map[‘aaa‘].password"><br>
                
                username2:<input type="text" name="map[‘bbb‘].username"><br>
                password2:<input type="password" name="map[‘bbb‘].password"><br>
            
            action类:
                private Map<String, User> map;
                提供get/set

 

Struts2 -- 获取请求参数