我知道S2提供了一种简洁的方法来获取操作类中的请求参数,只需遵循这些简单的规则即可。
但是,当我在这样的AJAX调用中执行此操作时:
$.ajax({
url: '/gma/getJSONData.action?tspName='+tspName+'&thresholdType='+thresholdType,
我没有在动作类中获得tspName
参数。我为它创建了getter / setter。它显示null
值。
我错了吗?
修改
我在Action类构造函数中检查tspName
的值,因此打印为null。但是,在我的execute方法中,它正确显示了值。为什么会这样?这意味着在构造函数调用之前它不会初始化值吗?
答案 0 :(得分:2)
我正在检查Action类构造函数中tspName的值,所以 打印无效。但是,在我的execute方法中,它显示了值 正确。为什么会这样?这意味着在构造函数调用之前它没有 初始化值?
你可能应该学习Struts2如何工作的基础知识。当您发出请求时,将调用过滤器,并且调度程序通过创建操作上下文和构建操作实例来处理请求。
然后在此操作上调用拦截器。 defaultStack
的拦截器之一是params
拦截器。它负责使用请求参数填充您的操作,以获得更多Struts2操作上下文参数。
这意味着您始终可以从操作上下文中获取参数。见How can we access request parameters passed into an Action。
在调用任何拦截器之前调用操作的构造函数,因此尚未填充操作,并且未初始化属性。另一方面,当执行操作时,所有拦截器都已被调用,因此将填充操作。在构造函数之前或构造函数之后它并不重要。问题是动作配置中的params
拦截器。
您始终可以获取上述链接中描述的参数,或直接从this answer中的servlet请求获取参数。您可以使用Struts2框架的所有功能。