Struts2 ModelDriven模板类

一:模板类

package com.book.ssh.base.actions;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;

import org.apache.struts2.interceptor.RequestAware;
import org.springframework.context.ApplicationContext;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

/**
 *
 * Action 基类,封装了泛型参数get set 方法
 * 注入spring applicationContext 对象
 *
 * @param <T> 参数类
 */
public class BaseActionSupport<T> extends ActionSupport implements ModelDriven<T>,RequestAware{

  /**
   * 声明的参数类
   * <br/><em>不建议名称修改为param
   * 可能会跟页面param对象冲突,导致通过struts取值机制冲突</em>
   */
  protected T formParam;
  /**
   * spring 上下文
   */
  protected ApplicationContext applicationContext;


  protected Map<String, Object> request;

  public void setRequest(Map<String, Object> arg0) {
        this.request = arg0;
  }

  protected Map<String, Object> session;


  /**
   * 构造参数对象
   */
  public BaseActionSupport() {
    if(formParam==null){
      try {
        formParam = getParameterizedTypeClass().newInstance();
      } catch (InstantiationException e) {
        e.printStackTrace();
      } catch (IllegalAccessException e) {
        e.printStackTrace();
      }
    }
  }


  private Class<T> getParameterizedTypeClass(){
    // 获取泛型类型
    Type type = getClass().getGenericSuperclass();
    Type[] trueType = ((ParameterizedType) type).getActualTypeArguments();
    return (Class<T>) trueType[0];
  }

  public T getFormParam() {
    return formParam;
  }

  public void setFormParam(T formParam) {
    this.formParam = formParam;
  }


  /**
   * 将泛型参数类映射为Struts的默认参数包装对象
   */
  @Override
  public T getModel() {
    return formParam;
  }
}

页面回显技术:
* 通过模型驱动,在动作类action中,可以获取到页面中元素的值

方法一  
* 通过javabean实例的set()方法,将新的内容set到javabean中,从而放置在页面对应元素中  
       user.setUsername(newUser.getUsername());  
        user.setTel(newUser.getTel());  
        user.setDes(newUser.getDes());  

方法二
* 首先将值栈中,旧的javabean的内容,删除掉
* 然后将新的内容压入到值栈中的栈顶

      ValueStack valueStack = ServletActionContext.getContext().getValueStack();  
        valueStack.pop();  
        valueStack.push(newUser);  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值