jquery 如何在Struts 2中将JSON绑定到Bean

mv1qrgav  于 2023-10-17  发布在  jQuery
关注(0)|答案(2)|浏览(102)

我想对一个Struts2动作进行Ajax调用,所以我想从客户机向服务器发送一个JSON,其中包含一个Employee bean的特定id
问题是应该如何构造它,以便将id设置为action中的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为null。

efzxgjgh

efzxgjgh1#

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

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

ukxgm1gy2#

如果您的Employee bean示例化并初始化了action bean,则它不能是null。这样,动作bean应该为Employee提供getter,为id属性提供setter。
确保action config中包含params interceptor,并且action class不是ModelDriven
jQuery将JavaScript对象转换为
发送到服务器的数据作为查询字符串附加到URL。如果data参数的值是一个plain object,则在将其附加到URL之前,将其转换为字符串并进行url编码。
然后你应该检查哪些参数被传递给动作。如果您的操作类实现了ParameterAware或从ActionContext获取参数,则可以这样做,如

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

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

相关问题