好吧,我想对struts 2操作进行Ajax调用,所以我想从客户端向服务器发送一个带有Employee bean特定id的JSON。问题是如何构造它以便在动作中为bean设置id。
我认为应该是这样的:
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。
答案 0 :(得分:0)
发送我的json对象它还没有直接写成数据:EmployeejsonObjects。因为它期望传递给它的JSON对象被写为键值对。所以我们把员工作为关键。由于我们将json对象存储在变量中,我们需要使用stringify()扩展json对象列表,否则它将作为java脚本对象发送。
$.getJSON('ajax/getPhoto.action', {employee: JSON.stringify(employee) } , function(data){
console.log(data);
});
答案 1 :(得分:0)
如果Employee
bean已实例化并初始化了操作bean,则它不能是null
。通过这种方式,action bean应该为Employee
提供getter,为id
属性提供setter。确保操作配置中包含的params
拦截器和您的操作类不是ModelDriven
。 jQuery转换像
发送到服务器的数据作为查询字符串附加到URL。如果data参数的值是普通对象,则在将其附加到URL之前,它将转换为字符串并进行url编码。
然后你应该检查哪些参数传递给动作。如果您的操作类实现ParameterAware
或从ActionContext
获取参数
Map parameters = ActionContext.getContext().getParameters();
这里'您可以自己填充参数而不是params
拦截器,因为您可以访问它们或正确配置拦截器 ,因此它可以完成工作。在调试问题时使用devMode
,因为它打印了无法设置的参数。