strtuts2---数据封装与处理

方式1: 直接拿到ServletApi, 执行操作
  直接获取servlet(通过servletactionContext提供的静态方法)

      HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        ServletContext application = ServletActionContext.getServletContext();
        // 操作
        request.setAttribute("request_data", "request_data1");
        session.setAttribute("session_data", "session_data1");
        application.setAttribute("application_data", "application_data1");
        */


        
 方式2: 通过ActionContext类        
     通过actioncontext获取不同的map(,ActionContext不能放到构造函数中)

   // 【推荐:解耦的方式实现对数据的操作】
        ActionContext ac = ActionContext.getContext();
        // 得到Struts对HttpServletRequest对象进行了封装,封装为一个map
        // 拿到表示request对象的map
         Map<String,Object> request =  ac.getContextMap(); 
         // 拿到表示session对象的map
         Map<String, Object> session = ac.getSession();
         // 拿到表示servletContext对象的map
         Map<String, Object> application = ac.getApplication();
         
         // 数据
         request.put("request_data", "request_data1_actionContext");
        session.put("session_data", "session_data1_actionContext");
        application.put("application_data", "application_data1_actionContext");


方式3: 实现接口的方法(如果常常使用这些对象)
 

public class DataAction extends ActionSupport implements RequestAware, SessionAware, ApplicationAware{
    
    private Map<String, Object> request;
    private Map<String, Object> session;
    private Map<String, Object> application;
    
    // struts运行时候,会把代表request的map对象注入
    @Override
    public void setRequest(Map<String, Object> request) {
        this.request = request;
    }
    
    // 注入session
    @Override
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }
    
    // 注入application
    @Override
    public void setApplication(Map<String, Object> application) {
        this.application = application;
    }


    @Override
    public String execute() throws Exception {
        
         // 数据
         request.put("request_data", "request_data1_actionAware");
        session.put("session_data", "session_data1_actionAware");
        application.put("application_data", "application_data1_actionAware");



        

4.采用属性封装(表单提交的值(全是string)自动转换类型(转换成同名属性的类型))

   表单数据

 <form action="${pageContext.request.contextPath }/form.action" method="post">
        用户名:<input type="text" name="username"/><br/>
        密 码:<input type="password" name="password"/><br/>
        地 址:<input type="text" name="address"/><br/>
        <input type="submit" value="提交"/>
    </form>

  声明表单属性,并生成set方法 (get方法可以没有,但是一定要有set方法.并且名称意义对应)

 private String username;
    private String password;
    private String address;

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String execute() throws Exception {
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setAddress(address);
        return NONE;
    }

5.模型驱动封装(重点)

public class DemoAction1 extends ActionSupport implements ModelDriven<User> {
    private User user = new User();

    public User getUser() {
        return user;
    }

    @Override
    public User getModel() {
        // TODO Auto-generated method stub
        return user;
    }

    public String execute() throws Exception {
        System.out.println(user);
        return NONE;
    }
}

6.表达式封装

  表单数据,注意name属性值的写法,实体对象。属性名

 <form action="${pageContext.request.contextPath }/form.action" method="post">
        用户名:<input type="text" name="user.username"/><br/>
        密 码:<input type="password" name="user.password"/><br/>
        地 址:<input type="text" name="user.address"/><br/>
        <input type="submit" value="提交"/>
    </form>

必须生成实体类的set和get方法

 private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String execute() throws Exception {
        System.out.println(user);
        return NONE;
    }

 7.List集合封装

      表单数据    [0]为list下标值

<form action="${pageContext.request.contextPath }/form5" method="post">
          用户名:<input type="text" name="list[0].username"/><br/>
          密 码:<input type="password" name="list[0].password"/><br/>
          年 龄:<input type="text" name="list[0].age"/><br/>
          地 址:<input type="text" name="list[0].address"/><br/>
          <input type="submit" value="提交"/>
      </form>

 

  代码

 

    private List<User> list;

    public List<User> getList() {
        return list;
    }

    public void setList(List<User> list) {
        this.list = list;
    }

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println(list);
        return NONE;
    }

8.Map集合封装

  页面   'one'为键

    <form action="${pageContext.request.contextPath }/form6" method="post">
          用户名:<input type="text" name="map['one'].username"/><br/>
          密 码:<input type="password" name="map['one'].password"/><br/>
          年 龄:<input type="text" name="map['one'].age"/><br/>
          地 址:<input type="text" name="map['one'].address"/><br/>
          <input type="submit" value="提交"/>
      </form>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值