如何在 Struts 2 中将 JSON 绑定到 bean
Posted
技术标签:
【中文标题】如何在 Struts 2 中将 JSON 绑定到 bean【英文标题】:How to bind JSON to a bean in Struts 2 【发布时间】:2014-08-16 21:01:41 【问题描述】:好吧,我想对 Struts 2 操作进行 Ajax 调用,所以我想从客户端向服务器发送一个带有 Employee
bean 特定 ID 的 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);
);
);
实际上,经过调试后,我可以看到在调用服务时Action
中的Employee
bean 为空。
【问题讨论】:
【参考方案1】:你的Employee
bean 不能是null
,如果它被实例化并初始化了action bean。这样,action bean 应该为Employee
提供getter 和id
属性的setter。
确保params
interceptor 包含在操作配置中,并且您的操作类不是ModelDriven
。
jQuery 像这样转换一个 javascript 对象
发送到服务器的数据作为查询字符串附加到 URL。如果 data 参数的值是 普通对象,则在附加到 URL 之前将其转换为字符串并进行 url 编码。
然后你应该检查哪些参数被传递给动作。如果您的操作类实现 ParameterAware
或从 ActionContext
获取参数,则可以这样做
Map parameters = ActionContext.getContext().getParameters();
在这里,您可以自己填充参数而不是 params
拦截器,因为您可以访问它们或正确配置拦截器,因此它能够完成工作。调试问题时使用打开的devMode
,因为它会打印出它无法设置的参数。
【讨论】:
【参考方案2】:发送我的 json 对象,它没有直接写为数据:EmployeejsonObjects。正如它所期望的,传递给它的 JSON 对象被写为键值对。所以我们让员工成为关键。并且由于我们将 json 对象存储在一个变量中,我们需要使用 stringify() 扩展 json 对象列表,否则它将作为 java 脚本对象发送。
$.getJSON('ajax/getPhoto.action', employee: JSON.stringify(employee) , function(data)
console.log(data);
);
【讨论】:
以上是关于如何在 Struts 2 中将 JSON 绑定到 bean的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Struts 2 中将数据库记录列表(通过 Hibernate 检索)显示到 JSP 页面?