struts2的action中方法重复执行

探讨Struts2中使用JSON插件时方法被意外执行两次的问题,介绍问题产生的原因及解决方案,包括修改方法名和指定序列化参数。

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方法向前台传值没有此问题发生。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值