如何将json绑定到Struts 2中的bean

时间:2014-06-26 05:48:34

标签: java jquery json struts2 getjson

好吧,我想对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。

2 个答案:

答案 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转换像

这样的Javascript对象
  

发送到服务器的数据作为查询字符串附加到URL。如果data参数的值是普通对象,则在将其附加到URL之前,它将转换为字符串并进行url编码。


然后你应该检查哪些参数传递给动作。如果您的操作类实现ParameterAware或从ActionContext获取参数

,则可以执行此操作
Map parameters = ActionContext.getContext().getParameters();

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