我想对一个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。
2条答案
按热度按时间efzxgjgh1#
发送我的json对象,它没有被直接写为数据:对象。因为它期望传递给它的JSON对象被写为键值对。所以我们把员工作为关键。由于我们有一个存储在变量中的json对象,我们需要使用stringify()扩展json对象列表,否则它将作为一个javascript对象发送。
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
获取参数,则可以这样做,如在这里,你可以自己填充参数,而不是
params
拦截器,因为你可以访问它们,或者正确地配置拦截器,所以它能够完成工作。使用devMode
在调试问题时打开,因为它会打印无法设置的参数。