最近在做东西的时候,action都是从BaseAction中继承而来.
BaseAction:
protected Map<String, Object> request; protected Map<String, Object> session; protected HttpServletRequest httpRequest; protected Map<String, Object> parameters; public static final String AUTHORIZE_ERROR = "authorize_error"; public BaseAction() { ActionContext ac = ActionContext.getContext(); parameters = (Map<String, Object>) ac.getParameters(); logger.debug("action parameters-------> "+parameters); }
碰到这样一个问题,第一个action的拦截器中,调用了action的Map params=action.getParameters()方法,来获得参数列表,然后需要在里面加入新的参数,直接调用params.put方法,
下一个action配置了一个token拦截器,在这个拦截器中获得参数是Map params2=ActionContext.getContext().getParameters();我在之前已经加入了params的put方法加入了token需要的两个参数,但是params2中并不包含这两个参数,这个问题一直纠结了一天时间,最后,试了一下,在第一个action的拦截器中也直接调用ActionContext.getContext().getParameters().put方法将参数加入进去,结果发现,这种方法可行,但是action.getParameters()却得不到第二种方式添加的参数.
改进后又出现了一个新的问题,因为put时候,value值用了"login.token"这种方式,parameterInterceptor将这个表达式解析成了ognl表达式,然后出现空指针异常,因为在上下文环境中并不存在login这个对象.目前没有找到如何不让这个拦截器将这个值解析成ognl表达式,只能将login.token改成下划线的方式,login_token,并不影响使用,我并没有仔细去研究parameterIntercepor这个拦截器的实现.也许可以有哪个参数可以配置.如果哪们知道,望告之,非常感谢.
另外希望有高人可以帮我解答一下这两种得到参数集合的方式有何不同,
欢迎拍砖.