(JimStoneAjax交流群:366984517)
在使用JimStoneAjax时,一些特殊场合下如果是通过参数名称的方式访问服务器命令,可能会失败。
如果是使用 Spring MVC 的朋友,可能遇到过这样的问题,线上环境中如果你的 Controller 方法中参数使用了 @RequestParam,有些参数我们不需要这个参数所以不加 @RequestParam 那么可能线上环境无法编译或者无法访问到这个请求。实际上和这个是同一个情况,就是 spring 无法获取到参数名称,导致注入失败。
主要原因是服务器编译class文件时没有生成参数名称信息,所以无法动态获取到,JimStoneAjax会自动通过参数位置设置参数名为 arg0,arg1....argN。我们从 Eclipse 中经常看到一些类提示信息参数名称就是这种名称的,一般都是因为编译时没有代入参数名称信息所以无法获取到真实名称。
大家在使用 JimStoneAjax 过程主要用到的标签其实就一个,就是 <ajax:script>。
这个编译问题主要会影响到 <ajax:load> 方法,我们知道,ajax:load 方法是通过参数名称传递参数值的。
解决办法主要两种:
建议使用第二种方法。
第一种是参数名称按照顺序,直接使用 arg0, arg1 等。但是这种方法有个问题,就是需要调节 eclipse 中的项目配置。我们的 eclipse 在项目属性中的 Java compiler 编译选项下的 Add variable attributes to generated class files 选项默认是选中的,所以开发环境通常是正常的,线上环境和开发环境的参数名称可能不一致。
第二种方法是修改编译参数,这种方法最为可靠。
使用 javac 指令编译的话可以加入 -d 参数。
使用 Ant 编译项目时可以给 javac 编译选项加入debug="true" debuglevel="lines,vars,source" 两个参数即可。