【问题标题】:Bean Validation + Resource Bundle ideas?Bean Validation + Resource Bundle 的想法?
【发布时间】:2011-07-19 00:40:36
【问题描述】:

这是我希望能够在我的 JPA 实体中对 bean 进行验证:

  1. 而不是@NotNull,我想做@NotNull(message="keyInMyResourceBundleFile")
  2. 我还想参数化 resourceBundle,但我不知道它的语法,因为在我看来消息属性只包含一个字符串。
  3. 参数本身可以是 i18n-ed。例如,假设 resourcebundle 参数有一个 param 属性,英文为@NotNull(message="missing.value", params={"credit card"}) String creditCard; 它将显示如下内容:“Missing required value for field credit card。在印度尼西亚,它将是类似“Nilai harus di isi untuk Kartu Kredit。在此示例中,我无法对“信用卡”进行硬编码,因为在印度尼西亚,它是“Kartu Kredit”
  4. 在日志文件或 UI 上显示资源包中定义的错误消息。我不知道该怎么做,我应该抓住ConstraintViolationException,获取消息,然后用我自己的代码处理资源包吗?

请分享您对此的看法?

谢谢!

【问题讨论】:

    标签: java jpa validation bean-validation resourcebundle


    【解决方案1】:

    关于 1 + 2

    @NotNull(message="{keyInMyResourceBundleFile}")
    

    大括号是参数替换的指示符

    关于 3

    不知道你在追求什么。 @NotNull 没有 params 属性。我猜你会做的

    @NotNull(message="{missing.credit.card}")

    如果你把它放在另一个属性上,你会调用键 {missing.name}

    关于 4

    ConstraintViolationException 包含一组 *ConstraintViolation*s。每个ConstraintViolation 都包含内插消息以及消息模板。如果你想记录它,那就去做吧......

    【讨论】:

    • 您能帮忙澄清一下“插值”是什么意思吗?它与消息属性值内的花括号有关吗?关于 no 3 是这样的:在我的资源包属性文件中,我有这个简单的条目:字段 {0} 的 empty.value=Value 是必需的。我想重用这个“{empty.value}”并传递将替换 {0} 的参数。例如,“用户 ID 字段的值是必需的”,或“密码字段的值是必需的”。目的是参数化值,并以某种方式传递值。
    • 抱歉,回答迟了。插值意味着,花括号 {} 代表消息包中的一个键。因此,在 @NotNull(message="{keyInMyResourceBundleFile}") 的情况下,您需要在属性文件中添加一行 'keyInMyResourceBundleFile=my message'。关于 3,Bean Validation 不知道已验证的字段名称。如果您使用 JSF,您可以使用 {0},它是一个特殊的标记,将替换为字段名称。这是可行的,因为 JSF 将 Bean Validation 与自定义 MessageInterpolator 集成在一起。
    • 感谢您的回答。这对我来说越来越清楚了。想尝试一下 BV + message key 的 JPA 实体,并利用 JSF Beans 中的实体来存储状态,并重用 BV。希望这会正常工作。祝我好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2022-06-29
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多