模板的 Play Framework 自定义 java 扩展

Posted

技术标签:

【中文标题】模板的 Play Framework 自定义 java 扩展【英文标题】:Play Framework custom java extensions for template 【发布时间】:2013-08-06 13:50:46 【问题描述】:

我正在使用 Play Framework 1.2.5,并尝试使用来自 Joda Time 的 DateTime 而不是通常的 java.util.Date。我正在尝试实现一种格式方法以在我的视图中使用。

Play 文档说我可以创建自己的custom java extensions 用于模板,但它似乎不适合我。我按照文档中的示例无济于事。

我的自定义扩展:

package ext;

import org.joda.time.DateTime;
import play.templates.JavaExtensions;

public class DateTimeExtensions extends JavaExtensions 

    public static String format(DateTime datetime, String format) 
        return datetime==null ? "" : datetime.toString(format);
    

我的模板代码:

$subProject?.startDate?.format('yyyy-MM-dd')

我收到的错误:

引发的异常是 MissingMethodException:没有方法签名:org.joda.time.DateTime.format() 适用于参数类型:(java.lang.String) 值:[yyyy-MM-dd]

Play 似乎没有像文档中所说的那样检测到我的自定义扩展。有人对如何进行这项工作有任何建议吗?

【问题讨论】:

你的扩展类在我看来不错。您是否重新启动了应用程序?也许play clean 有帮助?当您不使用 ?. 运算符检查 null 值时,是否也会发生这种情况? @Carsten play clean 为我工作,谢谢。将此作为答案发布,我会接受! 这很有帮助,谢谢。 【参考方案1】:

您的扩展类对我来说看起来不错。 documentation 声明您必须重新启动应用程序才能使扩展程序生效。如果这不起作用,请尝试运行play clean。这样做会删除临时文件,包括缓存的字节码,这有望解决您的问题。

【讨论】:

以上是关于模板的 Play Framework 自定义 java 扩展的主要内容,如果未能解决你的问题,请参考以下文章

使用 Play Framework JSON 库的自定义 Joda 时间序列化器?

使用 Play Framework 1.2.5 自定义验证 Map<Locale, String>

如何在 Play Framework v2 中指定自定义数据库连接参数以进行测试?

在 Play 1 框架中使用带有 groovy 模板的聚合物

渲染 Play framework 2.0.2 模板的一部分

如何在 Play Framework 模板中对列表进行排序?