如何在 Struts 2 中将 JSON 绑定到 bean

Posted

技术标签:

【中文标题】如何在 Struts 2 中将 JSON 绑定到 bean【英文标题】:How to bind JSON to a bean in Struts 2 【发布时间】:2014-08-16 21:01:41 【问题描述】:

好吧,我想对 Struts 2 操作进行 Ajax 调用,所以我想从客户端向服务器发送一个带有 Employee bean 特定 ID 的 JSON。

问题是应该如何构造它以便将id 设置为动作中的bean。

我认为应该是这样的:

var employee = Employee:id:"someId"

还好吗?

这是我使用的 jQuery 函数

 $('#select').change(function()
     var id = $(this).val();
     var employee = employee:id:"someid";
     
     $.getJSON('ajax/getPhoto.action', employee , function(data)
        console.log(data);
     );         
    
 );

实际上,经过调试后,我可以看到在调用服务时Action 中的Employee bean 为空。

【问题讨论】:

【参考方案1】:

你的Employee bean 不能是null,如果它被实例化并初始化了action bean。这样,action bean 应该为Employee 提供getter 和id 属性的setter。

确保params interceptor 包含在操作配置中,并且您的操作类不是ModelDriven

jQuery 像这样转换一个 javascript 对象

发送到服务器的数据作为查询字符串附加到 URL。如果 data 参数的值是 普通对象,则在附加到 URL 之前将其转换为字符串并进行 url 编码。


然后你应该检查哪些参数被传递给动作。如果您的操作类实现 ParameterAware 或从 ActionContext 获取参数,则可以这样做

Map parameters = ActionContext.getContext().getParameters();

在这里,您可以自己填充参数而不是 params 拦截器,因为您可以访问它们或正确配置拦截器,因此它能够完成工作。调试问题时使用打开的devMode,因为它会打印出它无法设置的参数。

【讨论】:

【参考方案2】:

发送我的 json 对象,它没有直接写为数据:EmployeejsonObjects。正如它所期望的,传递给它的 JSON 对象被写为键值对。所以我们让员工成为关键。并且由于我们将 json 对象存储在一个变量中,我们需要使用 stringify() 扩展 json 对象列表,否则它将作为 java 脚本对象发送。

$.getJSON('ajax/getPhoto.action', employee: JSON.stringify(employee)  , function(data)
        console.log(data);
    ); 

【讨论】:

以上是关于如何在 Struts 2 中将 JSON 绑定到 bean的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Struts 2 中将数据库记录列表(通过 Hibernate 检索)显示到 JSP 页面?

在 Vue 3 中将 JSON URL 绑定到 IMG

如何在 Struts 2 中将对象公开给我的所有视图?

如何在struts 2中将迭代器索引值传递给Javascript?

在struts 2中将可变数量的参数从表单传递到动作

如何在 Xamarin 表单中将数组绑定到 ListView