【问题标题】:How to read annotation value in play framework templates?如何读取播放框架模板中的注释值?
【发布时间】:2011-04-09 10:39:16
【问题描述】:

我想在 CRUD 模块模板中使用注释中的值来利用 HTML5 功能。

例如

@Range(min=0, max=10)

公共整数大小;

CRUD 模块使用views/tags/crud/numberField.html 来显示数字字段:

#{field 'object.' + _name}
    <label for="${field.id}">
        &{_name}
    </label>
    <input id="${field.id}" type="text" name="${field.name}" value="${params[field.name]?.escape()?.raw() ?: field.error?.message == 'validation.required' ? '' : _value?.escape()?.raw()}" size="5" />
    #{ifError field.name}
        <span class="error">${field.error}</span>
    #{/ifError}
#{/field}

如何从注释中读取最小值/最大值,然后在 中输出为 min="0" max="0" ?

【问题讨论】:

    标签: java playframework


    【解决方案1】:

    您可以通过向 CRUD 模块的 CRUD.ObjectType.ObjectField 内部类添加读取注释值的方法来做到这一点,例如类似:

    public String getRangeMin() {
        if (!property.field.isAnnotationPresent(Range.class)) {
            return null;
        }
        return property.field.getAnnotation(Range.class).min();
    }
    

    然后在crud/views/tags/crud/form.html 中,您可以在#{if field.type == 'number'} 内的新标签参数中使用它(注意field 在这里是CRUD.ObjectType.ObjectField

    #{crud.numberField min:field.min …
    

    该值随后在numberField.html 标记内以_min 的形式提供。

    【讨论】:

      【解决方案2】:

      你必须为此写一个FastTag。由于这都是 Java,因此您可以使用反射来查询对象中的注释。如果您想将其用于验证,您可以让 html5validation 模块为您执行此操作。

      【讨论】:

        【解决方案3】:

        在 Play! 中包含的验证示例中,示例 #7 包含一些 Jquery 代码,这些代码读取类中的注释并将它们用于 Javascript 验证。我相信这应该对你有所帮助。

        【讨论】:

          猜你喜欢
          • 2014-05-03
          • 2021-01-29
          • 2014-07-23
          • 2013-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-03
          • 2016-06-01
          相关资源
          最近更新 更多