前提: 使用 play 局部更新包生成器V3.0 (http://download.csdn.net/detail/fasttime/9453996) 打包 html,部署至线上后可能出现以下问题。
formatMobile() 是 play.templates.JavaExtensions 自定义的子类中的方法,但 play 本身并不会去找 JavaExtensions 自定义的子类的方法,所以导致了这个错误
play.exceptions.TemplateExecutionException: No signature of method: java.lang.String.formatMobile() is applicable for argument types: () values: []
at play.templates.BaseTemplate.throwException(BaseTemplate.java:86)
at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:272)
at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:282)
at play.templates.Template.render(Template.java:26)
at play.templates.GroovyTemplate.render(GroovyTemplate.java:202)
at play.mvc.results.RenderTemplate.<init>(RenderTemplate.java:24)
at play.mvc.Controller.renderTemplate(Controller.java:662)
at play.mvc.Controller.renderTemplate(Controller.java:642)
at play.mvc.Controller.render(Controller.java:699)
at controllers.BaseController.logIllegalState(BaseController.java:288)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:510)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:198)
将 JavaExtensions 自定义的子类的方法复制至 JavaExtensions 类中,替换 play-1.2.7.jar 中的 class 即可恢复正常。
注:
http://download.csdn.net/detail/fasttime/9453996 中的3.0 有缺陷,在类有内部类的情况下,打包会出现问题(内部类没打上去) ,V3.1已修复,有需要的请单独与我联系 。
20160312备注:
之前产生问题的原因是由于在定制 paly 包时,JavaExtensions 的子类没有被 ClassLoader 正常加载。采用最新的包(play-1.2.7.jar 定制版 http://download.csdn.net/detail/fasttime/9459444)或 重新参考文章(play1.2.7局部编译,局部打包完整解决方案 http://blog.csdn.net/fasttime/article/details/50813286) 将不会出现此类问题。
最后感谢贺军的协助。