在AJAX调用中的Action类Struts 2中访问url参数?

时间:2013-12-02 06:43:59

标签: java ajax jsp struts2 url-parameters

我知道S2提供了一种简洁的方法来获取操作类中的请求参数,只需遵循这些简单的规则即可。

  1. 创建一个与请求参数名称相同的属性。
  2. 为此属性创建getter和setter,或将属性设为public(对于S2.1 +)
  3. 但是,当我在这样的AJAX调用中执行此操作时:

     $.ajax({
        url: '/gma/getJSONData.action?tspName='+tspName+'&thresholdType='+thresholdType,
    

    我没有在动作类中获得tspName参数。我为它创建了getter / setter。它显示null值。

    我错了吗?

    修改 我在Action类构造函数中检查tspName的值,因此打印为null。但是,在我的execute方法中,它正确显示了值。为什么会这样?这意味着在构造函数调用之前它不会初始化值吗?

1 个答案:

答案 0 :(得分:2)

  

我正在检查Action类构造函数中tspName的值,所以   打印无效。但是,在我的execute方法中,它显示了值   正确。为什么会这样?这意味着在构造函数调用之前它没有   初始化值?

你可能应该学习Struts2如何工作的基础知识。当您发出请求时,将调用过滤器,并且调度程序通过创建操作上下文和构建操作实例来处理请求。

然后在此操作上调用拦截器。 defaultStack的拦截器之一是params拦截器。它负责使用请求参数填充您的操作,以获得更多Struts2操作上下文参数。

这意味着您始终可以从操作上下文中获取参数。见How can we access request parameters passed into an Action

在调用任何拦截器之前调用操作的构造函数,因此尚未填充操作,并且未初始化属性。另一方面,当执行操作时,所有拦截器都已被调用,因此将填充操作。在构造函数之前或构造函数之后它并不重要。问题是动作配置中的params拦截器。

您始终可以获取上述链接中描述的参数,或直接从this answer中的servlet请求获取参数。您可以使用Struts2框架的所有功能。