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

问题描述 投票:0回答:2

好吧,我想对 Struts 2 操作进行 Ajax 调用,因此我想将带有

id
bean 的特定
Employee
的 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);
     });         
    
 });

实际上,调试后我可以看到在调用服务时,

Employee
bean 在
Action
中为空。

java jquery json ajax struts2
2个回答
0
投票

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

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

0
投票
如果您的

Employee

 bean 已实例化并初始化了操作 bean,则它不能是 
null
。通过这种方式,操作 bean 应该为 
Employee
 提供 getter,并为 
id
 属性提供 setter。

确保操作配置中包含

params

拦截器
,并且您的操作类不是ModelDriven

jQuery 转换 JavaScript 对象,如

发送到服务器的数据作为查询字符串附加到 URL。如果 data 参数的值是一个

plain 对象,它会在附加到 URL 之前转换为字符串并进行 url 编码。


然后您应该检查哪些参数传递给了操作。如果您的操作类实现

ParameterAware

 或从 
ActionContext
 获取参数,则可以执行此操作,如

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


在这里'您可以自己填充参数,而不是

params

 拦截器,因为您可以访问它们或正确配置拦截器,因此它能够完成工作。调试问题时打开 
devMode,因为它会打印无法设置的参数。

© www.soinside.com 2019 - 2024. All rights reserved.