项目中使用Struts2.。像很多问题一样,刚开始出现的时候,觉得很诡异,难以入手;解决掉之后,就知道其实很简单了。
前几天遇到一个问题,在某Action类中定义了一个名为success的字符串变量,正常情况下某actino1完成时,success的值应该是”true”;结果发现有些情况下,action1成功执行之后,success的值居然变成了”false”。我启用调试模式跟踪了一下,发现action1最后返回前,success已经赋值为”true”了,出现灵异现象了?
联想到前几天发的关于导出Excel的那篇文章中,在Action类中定义了一个getDownloadFileName方法来定制文件的名字,突然发现,这个Action类中,有一个名为getXXXX的方法(这个方法被定义为另一个action的执行方法),方法中有一个条件下,会给success变量赋值”false”。而struts2默认会执行Action(result type为json)中所有以get开头的方法,不出问题才怪呢!
于是动手在该getXXXX方法前,加上注解 @JSON(serialize=false),阻止框架对其序列化,即可避免每次执行action时,该方法的自动执行。
一个“诡异”的问题解决了。