【问题标题】:Access url parameters in Action classes Struts 2 in AJAX call?在AJAX调用中访问Action类Struts 2中的url参数?
【发布时间】:2013-12-17 19:24:10
【问题描述】:

我知道 S2 提供了一种简洁的方式来获取你的动作类中的请求参数,你需要遵循这些简单的规则。

  1. 创建一个与请求参数名称同名的属性。
  2. 为此属性创建 getter 和 setter 或将属性公开(对于 S2.1+)

但是,当我在这样的 AJAX 调用中执行此操作时:

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

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

我是不是哪里错了?

编辑: 我在我的 Action 类构造函数中检查 tspName 的值,所以打印 null。但是,在我的执行方法中,它正确显示了该值。为什么会这样?这意味着在构造函数调用之前它不会初始化值?

【问题讨论】:

  • 您能否验证参数名称是否与您作为参数传递的名称完全匹配?还要验证此参数是否确实存在于请求 URL 中,并且其名称与您希望在操作类中接收的名称匹配
  • 发送的请求 url 是什么?签入 chrome-developer tools-> Network 选项卡。
  • @coding_idiot: /gma/getJSONData.action?tspName=RELIANCE&thresholdType=undefined
  • @coding_idiot:在 url 内部,它正确地填充了数据。是不是在 AJAX 调用中这种方法不起作用,而它在正常的 url 提交中起作用???
  • 你能显示你的getter/setter代码吗?

标签: java ajax jsp struts2 url-parameters


【解决方案1】:

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

也许您应该了解 Struts2 的基本工作原理。当您发出请求时,将调用过滤器,并且调度程序通过创建操作上下文和构建操作实例来处理请求。

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

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

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

您始终可以像上面链接中描述的那样获取参数,或者直接从 servlet 请求中获取参数,例如 this 答案。您可以使用 Struts2 框架的所有功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多