struts2中使用json插件执行ajax处理时,如果方法名是get方法的时候,方法会莫名其妙的执行两次。
原因:struts2 中JSON的原理是在ACTION中的get方法都会序列化,前面是get的方法只要没指定不序列化,都会在序列化时再执行一次
解决方法
1、Action中的业务方法前不要以get开头 (属性的get set 除外)
2、用@JSON(serialize=false)指定方法不序列化
@Controller
@ParentPackage(value="json-default")
@Namespace("/middleware")
@Results({
@Result(name="success",type="json")
})
public class JvmInfoAction extends BaseAction<JvmInfo,String> {
public String getRealJvmInfo() {
..................
..................
return SUCCESS;
}
}
上面的getRealJvmInfo业务方法一次请求,结果执行了两次,改为realJvmInfo,结果只执行一次。
还有一种很好的解决办法在@Result注解中加上params={"root","jvmInfo"},JSON插件将只序列化指定的jvmInfo对象,这应该是一种最佳实践。
注意:此问题只出现在使用Struts2的JSON插件struts-json-plugin的情况下,在使用SpringSide的Struts2Utils.renderJson方法向前台传值没有此问题发生。
探讨Struts2中使用JSON插件时方法被意外执行两次的问题,介绍问题产生的原因及解决方案,包括修改方法名和指定序列化参数。
206

被折叠的 条评论
为什么被折叠?



