关于操作”增删改查“的 拦截

小马奔腾123 发布于 2015/01/13 21:06
阅读 193
收藏 0

@JFinal 你好,想跟你请教个问题:我现在要做一个对所有action中的操作(增 删 改 查)做一个记录,每操作一次就将当前人的ip,用户名,操作内容以及操作状态等写入数据库,我的action都是void型,无返回值,我要记录操作的状态成功与否(我有一个是要发送短信)就不知道怎么拦截并插入数据库,我都是在ajax中加载的

加载中
0
JFinal
JFinal

通常 action 中处理完数据以后会使用 setAttr(...) 将处理结果及状态保存并传给 render 的模板去使用,所以只需要在拦截器中使用 ai.getController.getAttr(...) 读取到这些数据就可以了,大致如下:

public OperationLogInterceptor implements Interceptor {
 public void intercept(ActionInvocation ai) {
  ai.invoke();
  Controller c = ai.getController();
  String opStatus = )String)c.getAttr("opStatus");
  String ip = IpKit.getRealIp(c.getRequest());
  String userName = c.getSessionAttr("loginUser")).getStr("userName");
  String actionKey = ai.getActionKey();
 
  // 将数据存入数据库
  new Operation().set("userName", userName)
  .set("opstatus", opStatus).set("ip", ip")
  .set("actionKey", actionKey)
  .save();
 }
}

  注意 ai.invoke() 这行代码放在最前面,这样就会先去执行 action,后面再去将 action 执行后的操作结果入库,虽然 action 返回值是 void,但可以通过 setAttr或者 ThreadLocal 等方式传值给 interceptor 使用

JFinal
JFinal
回复 @xie19900123 : 具体一点,开个新的问答吧
oKong
oKong
请问,在拦截器中是否可实现注解事务?
返回顶部
顶部