JFinal 拦截器无法获取表单post提交的数据

发布于 2021-12-02 07:42:47 字数 1285 浏览 631 评论 6

@JFinal 你好,想跟你请教个问题:JFinal 拦截器无法获取表单post提交的数据,而ajax提交的数据可以获取到,控制台能打印数据。

public class VisitLogInterceptor implements Interceptor {
public static final Logger LOG=Logger.getLogger(VisitLogInterceptor.class);

@Override
public void intercept(Invocation inv) {
try{
HttpSession session = inv.getController().getSession();
   HttpServletRequest request=inv.getController().getRequest();
   Map<String,String[]> paraMap=inv.getController().getParaMap();
String remoteIp=request.getRemoteAddr();
String controller=inv.getControllerKey();
String action=inv.getActionKey();
String username=(String) session.getAttribute(PermissionChecker.ADMIN_USERNAME);
Record record=new Record();
record.set("log_time", new Date());
record.set("action", action);
record.set("controller", controller);
record.set("username", username);
record.set("remote_ip", remoteIp);
record.set("filter",JsonKit.toJson(paraMap));
Db.use("jjb_log").save("jjb_visit_log",record);
}catch(Exception e){
LOG.error(e.getMessage(), e);
}finally{
inv.invoke();
}  
}


}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

本王不退位尔等都是臣 2021-12-04 21:00:03

终极方法:单步调试

南冥有猫 2021-12-04 21:00:02

引用来自“JFinal”的评论

   不知道 paraName 的情况下,参考一下 jfinal Controller 的 keepPara 方法:

/**
 * Keep all parameter's value except model value
 */
public Controller keepPara() {
 Map<String, String[]> map = request.getParameterMap();
 for (Entry<String, String[]> e: map.entrySet()) {
  String[] values = e.getValue();
  if (values.length == 1)
   request.setAttribute(e.getKey(), values[0]);
  else
   request.setAttribute(e.getKey(), values);
 }
 return this;
}

南冥有猫 2021-12-04 20:59:58

   不知道 paraName 的情况下,参考一下 jfinal Controller 的 keepPara 方法:

/**
 * Keep all parameter's value except model value
 */
public Controller keepPara() {
 Map<String, String[]> map = request.getParameterMap();
 for (Entry<String, String[]> e: map.entrySet()) {
  String[] values = e.getValue();
  if (values.length == 1)
   request.setAttribute(e.getKey(), values[0]);
  else
   request.setAttribute(e.getKey(), values);
 }
 return this;
}

无人问我粥可暖 2021-12-04 20:55:54

我是想做通用的拦截,不到参数的具体名字,该怎么做

成熟的代价 2021-12-04 20:54:16

回复
getParaMap() 然后在 for 循环中迭代处理

疑心病 2021-12-04 20:44:30

   两种最常见用法,选一种即可:

Controller c = inv.getController();
c.getPara(..);
c.getModel(...);
c.getBean(...);

   上面的方式是先从 inv 中获取 controller,剩下的代码与 action 中完全一样。

HttpServletRequest req = inv.getController().getRequest();
req.getParameter(...);

   上面是先获取 HttpSerlvetRequest 对象,剩下的代码与常规 servlet 项目一样。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文