JFina教程JfinalUIB 代碼筆記 (3)--- jfinal Controller參數封裝

一般咱們使用jfinal開發都會寫本身的BaseController來作一些公共全局變量的聲明,或者用來實現一些公共方法,JfinalUIB也不例外。java

參數的封裝主要是在ParamPkgInterceptor類中實現,採用的是jfinal的攔截器。debug

首先獲得controller和BaseController聲明的一些全局變量字段code

BaseController controller = (BaseController) ai.getController();
  
  Class<?> controllerClass = controller.getClass();
  Class<?> superControllerClass = controllerClass.getSuperclass();
  
  Field[] fields = controllerClass.getDeclaredFields();
  Field[] parentFields = superControllerClass.getDeclaredFields();

在ai.invoke();以前實現請求參數數據到變量的封裝orm

log.debug("*********************** 封裝參數值到 controller 全局變量  start ***********************");
 

  // 封裝controller變量值
  for (Field field : fields) {
   setControllerFieldValue(controller, field);
  }
  
  // 封裝baseController變量值
  for (Field field : parentFields) {
   setControllerFieldValue(controller, field);
  }
  log.debug("*********************** 封裝參數值到 controller 全局變量  end ***********************");

在ai.invoke();以後實現變量到request封裝ci

log.debug("*********************** 設置全局變量值到 request start ***********************");
  // 封裝controller變量值
  for (Field field : fields) {
   setRequestValue(controller, field);
  }
  
  // 封裝baseController變量值
  for (Field field : parentFields) {
   setRequestValue(controller, field);
  }
  
  log.debug("*********************** 設置全局變量值到 request end ***********************");

下面是反射用到的公共方法開發

/**
  * 反射set值到全局變量
  * @param controller
  * @param field
  */
 public void setControllerFieldValue(BaseController controller, Field field){
  try {
   field.setAccessible(true);
   String name = field.getName();
   String value = controller.getPara(name);
   if(null == value || value.isEmpty()){// 參數值爲空直接結束
    log.debug("參數值爲空");
    return;
   }
   String fieldType = field.getType().getSimpleName();
   if(fieldType.equals("String")){
    field.set(controller, value);
   
   }else if(fieldType.equals("int")){
    field.set(controller, Integer.parseInt(value));
    
   }else if(fieldType.equals("Date")){
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
    field.set(controller, format.parse(value));
   
   }else if(fieldType.equals("BigDecimal")){
    BigDecimal bdValue = new BigDecimal(value);
    field.set(controller, bdValue);
    
   }else{
    field.setAccessible(false);
    log.debug("沒有解析到有效字段類型");
   }
   
   field.setAccessible(false);
  } catch (IllegalArgumentException e1) {
   e1.printStackTrace();
  } catch (IllegalAccessException e1) {
   e1.printStackTrace();
  } catch (ParseException e) {
   e.printStackTrace();
  }
 } 
 
 /**
  * 反射全局變量值到request
  * @param controller
  * @param field
  */
 public void setRequestValue(BaseController controller, Field field){
  try {
   field.setAccessible(true);
   Object value = field.get(controller);
   if(null == value){// 參數值爲空直接結束
    field.setAccessible(false);
    log.debug("參數值爲空");
    return;
   }
   String name = field.getName();
   field.setAccessible(false);
   controller.setAttr(name, value);
  } catch (IllegalArgumentException e1) {
   e1.printStackTrace();
  } catch (IllegalAccessException e1) {
   e1.printStackTrace();
  }
 }
相關文章
相關標籤/搜索