@Jfinal Jfinal 拦截器中修改getParaMap中的参数值无效

stanleyMT 发布于 2014/03/07 14:54
阅读 2K+
收藏 0

您好,最近刚开始使用jfinal,使用ajax做请求的时候对中文内容用encodeURI做了两次编码,然后想通过定义一个拦截器来进行解码,但是拦截器中明明参数都已经解码为中文了,但是为何在拦截器后面的action中取到的值依旧是未解码的值,谢谢~拦截器内部的代码我是这样写的

public void intercept(ActionInvocation ai) {
        Controller controller = ai.getController();

        for (String[] parames : controller.getParaMap().values()) {
            for (int i = 0; i < parames.length; i++) {
                //使用工具两次解码
                parames[i] = StringUtil.stringDecoder(parames[i]);
            }
        }
        ai.invoke();
    }



后来,也试过直接从request取parameter来改,但是还是无效,因此我想问下是否jfinal中无法直接通过拦截器来修改request中的parameter?



加载中
0
Vity
Vity
~~~~  仔细看源码
0
itartisan
itartisan

controller.getParaMap()是直接从request中取的值:request.getParameterMap(),想要修改可以这样:

controller.setAttr("parames", parames);
ai.invoke();




0
JFinal
JFinal

    ParaMap 是只读的,通过 controller.getParaMap().values() 得到的 String[] parames 是新建的对象,对其进行改变并不影响 ParaMap 中的数据。

    为何不解码后直接用变量传递给 controller? 也可在写个工具类在 controller 现转现用

stanleyMT
stanleyMT
囧~是接触,打错字了
stanleyMT
stanleyMT
恩,多谢回复,最近刚解除jfinal,以前使用struts的时候习惯这样做了,我试试直接传变量。jfinal很好用,大神厉害啊!
返回顶部
顶部