1. 程式人生 > >play 部署問題 play.exceptions.TemplateExecutionException: No signature of method: java.lang.String.f

play 部署問題 play.exceptions.TemplateExecutionException: No signature of method: java.lang.String.f

前提: 使用 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)  將不會出現此類問題。

最後感謝賀軍的協助。