好吧,我想对 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
中为空。
发送我的 json 对象,它没有直接写为数据:EmployeejsonObjects。因为它期望传递给它的 JSON 对象以键值对的形式写入。所以我们把员工作为关键。由于我们将 json 对象存储在变量中,因此我们需要使用 stringify() 扩展 json 对象列表,否则它将作为 java 脚本对象发送。
$.getJSON('ajax/getPhoto.action', {employee: JSON.stringify(employee) } , function(data){
console.log(data);
});
Employee
bean 已实例化并初始化了操作 bean,则它不能是
null
。通过这种方式,操作 bean 应该为
Employee
提供 getter,并为
id
属性提供 setter。确保操作配置中包含
拦截器,并且您的操作类不是
ModelDriven
。jQuery 转换 JavaScript 对象,如
发送到服务器的数据作为查询字符串附加到 URL。如果 data 参数的值是一个plain 对象,它会在附加到 URL 之前转换为字符串并进行 url 编码。
ParameterAware
或从
ActionContext
获取参数,则可以执行此操作,如
Map parameters = ActionContext.getContext().getParameters();
params
拦截器,因为您可以访问它们或正确配置拦截器,因此它能够完成工作。调试问题时打开
devMode
,因为它会打印无法设置的参数。